Lab - Intents

启动程序

  1. private void startExplicitActivation() {
  2. Log.i(TAG,"Entered startExplicitActivation()");
  3. // TODO - Create a new intent to launch the ExplicitlyLoadedActivity class
  4. Intent intent=new Intent(ActivityLoaderActivity.this, ExplicitlyLoadedActivity.class);
  5. startActivityForResult(intent, 0);
  6. // TODO - Start an Activity using that intent and the request code defined above
  7. }
  1. private void startImplicitActivation() {
  2.  
  3. Log.i(TAG, "Entered startImplicitActivation()");
  4.  
  5. // TODO - Create a base intent for viewing a URL
  6. // (HINT: second parameter uses parse() from the Uri class)
  7. Uri webpage = Uri.parse("http://www.google.com");
  8. Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
  9.  
  10. // TODO - Create a chooser intent, for choosing which Activity
  11. // will carry out the baseIntent. Store the Intent in the
  12. // chooserIntent variable below. HINT: using the Intent class'
  13. // createChooser
  14.  
  15. Intent chooserIntent = Intent.createChooser(webIntent, "CHOOSER");
  16. Log.i(TAG,"Chooser Intent Action:" + chooserIntent.getAction());
  17. // TODO - Start the chooser Activity, using the chooser intent
  18. startActivity(chooserIntent);
  19. }

关联程序

  1. <activity
  2. android:name=".MyBrowserActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <action android:name="android.intent.action.VIEW" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. <category android:name="android.intent.category.DEFAULT" />
  9. <category android:name="android.intent.category.BROWSABLE" />
  10. <data android:scheme="http" />
  11. </intent-filter>
  12.  
  13. <!-- TODO - Add necessary intent filter information so that this
  14. Activity will accept Intents with the
  15. action "android.intent.action.VIEW" and with an "http"
  16. schemed URL -->
  17. </activity>

Lab - Permissions

读取书签--使用权限

  1. <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
  1. private void loadBookmarks() {
  2.  
  3. Log.i(TAG, "Entered loadBookmarks()");
  4.  
  5. String text = "";
  6.  
  7. Cursor query = getContentResolver().query(Browser.BOOKMARKS_URI,
  8. projection, null, null, null);
  9.  
  10. query.moveToFirst();
  11. while (query.moveToNext()) {
  12.  
  13. text += query.getString(query
  14. .getColumnIndex(Browser.BookmarkColumns.TITLE));
  15. text += "\n";
  16. text += query.getString(query
  17. .getColumnIndex(Browser.BookmarkColumns.URL));
  18. text += "\n\n";
  19.  
  20. }
  21.  
  22. TextView box = (TextView) findViewById(R.id.text);
  23. box.setText(text);
  24.  
  25. Log.i(TAG, "Bookmarks loaded");
  26. }

自定义权限

  1. <permission android:name="course.labs.permissions.DANGEROUS_ACTIVITY_PERM" android:protectionLevel="dangerous"></permission>
  2.  
  3. <application
  4. android:allowBackup="true"
  5. android:icon="@drawable/ic_launcher"
  6. android:label="@string/app_name"
  7. android:theme="@style/AppTheme" >
  8.  
  9. <!-- TODO - enforce the custom permission on this Activity -->
  10.  
  11. <activity
  12. android:name=".DangerousActivity"
  13. android:label="@string/app_name" >
  14.  
  15. <!--
  16. TODO - add additional intent filter info so that this Activity
  17. will respond to an Implicit Intent with the action
  18. "course.labs.permissions.DANGEROUS_ACTIVITY"
  19. -->
  20.  
  21. <intent-filter>
  22. <action android:name="android.intent.action.MAIN" />
  23. <action android:name="course.labs.permissions.DANGEROUS_ACTIVITY"/>
  24. <category android:name="android.intent.category.LAUNCHER" />
  25. </intent-filter>
  26. </activity>
  27. </application>

Lab - The Fragment Class

主activity定义layout

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:id="@+id/fragment_container"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" />

添加fragment

  1.         mFriendsFragment = new FriendsFragment();
  2.  
  3. //TODO 1 - add the FriendsFragment to the fragment_container
  4. FragmentTransaction a=getFragmentManager().beginTransaction();
  5. a.add(R.id.fragment_container,mFriendsFragment);
  6. a.commit();

替换fragment

  1. //TODO 2 - replace the fragment_container with the FeedFragment
  2.  
  3. getFragmentManager().beginTransaction().replace(
  4. R.id.fragment_container, mFeedFragment).commit();
  5.  
  6. // execute transaction now
  7. getFragmentManager().executePendingTransactions();

// Update Twitter feed display on FriendFragment
mFeedFragment.updateFeedDisplay(position);

判断fragment状态

  1. // If there is no fragment_container ID, then the application is in
  2. // two-pane mode
  3.  
  4. private boolean isInTwoPaneMode() {
  5.  
  6. return findViewById(R.id.fragment_container) == null;
  7.  
  8. }

Lab - User Interface Classes

用户设定日期

  1. public static class DatePickerFragment extends DialogFragment implements
  2. DatePickerDialog.OnDateSetListener {
  3.  
  4. @Override
  5. public Dialog onCreateDialog(Bundle savedInstanceState) {
  6.  
  7. // Use the current date as the default date in the picker
  8.  
  9. final Calendar c = Calendar.getInstance();
  10. int year = c.get(Calendar.YEAR);
  11. int month = c.get(Calendar.MONTH);
  12. int day = c.get(Calendar.DAY_OF_MONTH);
  13.  
  14. // Create a new instance of DatePickerDialog and return it
  15. return new DatePickerDialog(getActivity(), this, year, month, day);
  16. }
  17.  
  18. @Override
  19. public void onDateSet(DatePicker view, int year, int monthOfYear,
  20. int dayOfMonth) {
  21. setDateString(year, monthOfYear, dayOfMonth);
  22.  
  23. dateView.setText(dateString);
  24. }
  25.  
  26. }
  27.  
  28. private void showDatePickerDialog() {
  29. DialogFragment newFragment = new DatePickerFragment();
  30. newFragment.show(getFragmentManager(), "datePicker");
  31. }
  32.  
  33. private static void setDateString(int year, int monthOfYear, int dayOfMonth) {
  34.  
  35. // Increment monthOfYear for Calendar/Date -> Time Format setting
  36. monthOfYear++;
  37. String mon = "" + monthOfYear;
  38. String day = "" + dayOfMonth;
  39.  
  40. if (monthOfYear < 10)
  41. mon = "0" + monthOfYear;
  42. if (dayOfMonth < 10)
  43. day = "0" + dayOfMonth;
  44.  
  45. dateString = year + "-" + mon + "-" + day;
  46. }

用户设定时间

  1. // DialogFragment used to pick a ToDoItem deadline time
  2.  
  3. public static class TimePickerFragment extends DialogFragment implements
  4. TimePickerDialog.OnTimeSetListener {
  5.  
  6. @Override
  7. public Dialog onCreateDialog(Bundle savedInstanceState) {
  8.  
  9. // Use the current time as the default values for the picker
  10. final Calendar c = Calendar.getInstance();
  11. int hour = c.get(Calendar.HOUR_OF_DAY);
  12. int minute = c.get(Calendar.MINUTE);
  13.  
  14. // Create a new instance of TimePickerDialog and return
  15. return new TimePickerDialog(getActivity(), this, hour, minute,
  16. true);
  17. }
  18.  
  19. public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
  20. setTimeString(hourOfDay, minute, 0);
  21.  
  22. timeView.setText(timeString);
  23. }
  24. }
  25.  
  26. private void showTimePickerDialog() {
  27. DialogFragment newFragment = new TimePickerFragment();
  28. newFragment.show(getFragmentManager(), "timePicker");
  29. }
  30.  
  31. private static void setTimeString(int hourOfDay, int minute, int mili) {
  32. String hour = "" + hourOfDay;
  33. String min = "" + minute;
  34.  
  35. if (hourOfDay < 10)
  36. hour = "0" + hourOfDay;
  37. if (minute < 10)
  38. min = "0" + minute;
  39.  
  40. timeString = hour + ":" + min + ":00";
  41. }

设定默认日期时间

  1. // Use this method to set the default date and time
  2.  
  3. private void setDefaultDateTime() {
  4.  
  5. mDate = new Date();
  6. mDate = new Date(mDate.getTime());
  7.  
  8. Calendar c = Calendar.getInstance();
  9. c.setTime(mDate);
  10.  
  11. setDateString(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
  12. c.get(Calendar.DAY_OF_MONTH));
  13.  
  14. dateView.setText(dateString);
  15.  
  16. setTimeString(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE),
  17. c.get(Calendar.MILLISECOND));
  18.  
  19. timeView.setText(timeString);
  20. }

使用BaseAdapter实现复杂的ListView(转)原文链接

  1. package com.app.weixin;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6.  
  7. import com.app.wexin.R;
  8.  
  9. import android.app.Activity;
  10. import android.app.AlertDialog;
  11. import android.content.Context;
  12. import android.content.DialogInterface;
  13. import android.content.Intent;
  14. import android.os.Bundle;
  15. import android.view.LayoutInflater;
  16. import android.view.View;
  17. import android.view.ViewGroup;
  18. import android.widget.BaseAdapter;
  19. import android.widget.Button;
  20. import android.widget.ImageView;
  21. import android.widget.ListView;
  22. import android.widget.TextView;
  23.  
  24. public class WeixinActivity extends Activity {
  25. private ImageView img;
  26. private List<HashMap<String, Object>> mData;
  27. private ListView listView;
  28.  
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.friend_list);
  33. mData = getData();//为刚才的变量赋值
  34. MyAdapter adapter = new MyAdapter(this);//创建一个适配器
  35.  
  36. listView = (ListView) findViewById(R.id.listView1);//实例化ListView
  37. listView.setAdapter(adapter);//为ListView控件绑定适配器
  38. }
  39.  
  40. /** 自定义适配器 */
  41. public class MyAdapter extends BaseAdapter {
  42. private LayoutInflater mInflater;// 动态布局映射
  43.  
  44. public MyAdapter(Context context) {
  45. this.mInflater = LayoutInflater.from(context);
  46. }
  47.  
  48. // 决定ListView有几行可见
  49. @Override
  50. public int getCount() {
  51. return mData.size();// ListView的条目数
  52. }
  53.  
  54. @Override
  55. public Object getItem(int arg0) {
  56. return null;
  57. }
  58.  
  59. @Override
  60. public long getItemId(int arg0) {
  61. return 0;
  62. }
  63.  
  64. @Override
  65. public View getView(int position, View convertView, ViewGroup parent) {
  66. convertView = mInflater.inflate(R.layout.friend_list_item, null);//根据布局文件实例化view
  67. TextView title = (TextView) convertView.findViewById(R.id.title);//找某个控件
  68. title.setText(mData.get(position).get("title").toString());//给该控件设置数据(数据从集合类中来)
  69. TextView time = (TextView) convertView.findViewById(R.id.time);//找某个控件
  70. time.setText(mData.get(position).get("time").toString());//给该控件设置数据(数据从集合类中来)
  71. TextView info = (TextView) convertView.findViewById(R.id.info);
  72. info.setText(mData.get(position).get("info").toString());
  73. img = (ImageView) convertView.findViewById(R.id.img);
  74. img.setBackgroundResource((Integer) mData.get(position).get("img"));
  75. return convertView;
  76. }
  77. }
  78. // 初始化一个List
  79. private List<HashMap<String, Object>> getData() {
  80. // 新建一个集合类,用于存放多条数据
  81. ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
  82. HashMap<String, Object> map = null;
  83. for (int i = 1; i <= 40; i++) {
  84. map = new HashMap<String, Object>();
  85. map.put("title", "人物" + i);
  86. map.put("time", "9月20日");
  87. map.put("info", "我通过了你的好友验证请求");
  88. map.put("img", R.drawable.pic_person);
  89. list.add(map);
  90. }
  91.  
  92. return list;
  93. }
  94. public void showInfo(int position){
  95. getData();
  96. }
  97. }

Lab - Notifications

注册broadcast receiver

  1. public static final String DATA_REFRESHED_ACTION = "course.labs.notificationslab.DATA_REFRESHED";
  2.  
  3. private BroadcastReceiver mRefreshReceiver;
  4.  
  5. registerReceiver(mRefreshReceiver, new IntentFilter(DATA_REFRESHED_ACTION));
  6.  
  7. unregisterReceiver(mRefreshReceiver);
  1. final PendingIntent pendingIntent = PendingIntent.getActivity(mParentActivity, 0, restartMainActivtyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
  2.  
  3. // Uses R.layout.custom_notification for the
  4. // layout of the notification View. The xml
  5. // file is in res/layout/custom_notification.xml
  6.  
  7. RemoteViews mContentView = new RemoteViews(
  8. mApplicationContext.getPackageName(),
  9. R.layout.custom_notification);
  10.  
  11. // TODO: Set the notification View's text to
  12. // reflect whether or the download completed
  13. // successfully
  14. mContentView.setTextViewText(R.id.text, successMsg);
  15.  
  16. // TODO: Use the Notification.Builder class to
  17. // create the Notification. You will have to set
  18. // several pieces of information. You can use
  19. // android.R.drawable.stat_sys_warning
  20. // for the small icon. You should also setAutoCancel(true).
  21.  
  22. Notification.Builder notificationBuilder = new Notification.Builder(
  23. mParentActivity)
  24. .setSmallIcon(android.R.drawable.stat_sys_warning)
  25. .setAutoCancel(true)
  26. .setContent(mContentView)
  27. .setContentIntent(pendingIntent);
  28.  
  29. // TODO: Send the notification
  30. // Pass the Notification to the NotificationManager:
  31. NotificationManager mNotificationManager = (NotificationManager) mParentActivity.getSystemService(Context.NOTIFICATION_SERVICE);
  32. mNotificationManager.notify(MY_NOTIFICATION_ID,
  33. notificationBuilder.build());

Lab - Graphics(Gesture)

  1. mGestureDetector = new GestureDetector(this,
  2.  
  3. new GestureDetector.SimpleOnGestureListener() {
  4.  
  5. // If a fling gesture starts on a BubbleView then change the
  6. // BubbleView's velocity
  7.  
  8. @Override
  9. public boolean onFling(MotionEvent event1, MotionEvent event2,
  10. float velocityX, float velocityY) {
  11.  
  12. // TODO - Implement onFling actions.
  13. // You can get all Views in mFrame using the
  14. // ViewGroup.getChildCount() method
  15. for(int i=0;i<mFrame.getChildCount();i++){
  16. BubbleView bubbleNew= (BubbleView) mFrame.getChildAt(i);
  17. if (bubbleNew.intersects(event1.getX(),event1.getY())){
  18. bubbleNew.deflect(velocityX, velocityY);
  19. return true;
  20. }
  21. }
  22.  
  23. return false;
  24.  
  25. }
  26.  
  27. // If a single tap intersects a BubbleView, then pop the BubbleView
  28. // Otherwise, create a new BubbleView at the tap's location and add
  29. // it to mFrame. You can get all views from mFrame with ViewGroup.getChildAt()
  30.  
  31. @Override
  32. public boolean onSingleTapConfirmed(MotionEvent event) {
  33.  
  34. // TODO - Implement onSingleTapConfirmed actions.
  35. // You can get all Views in mFrame using the
  36. // ViewGroup.getChildCount() method
  37. for(int i=0;i<mFrame.getChildCount();i++){
  38. BubbleView bubbleNew= (BubbleView) mFrame.getChildAt(i);
  39. if (bubbleNew.intersects(event.getX(),event.getY())){
  40. //sound now
  41. return true;
  42. }
  43. }
  44. BubbleView bubbleView = new BubbleView(getApplicationContext(), event.getX(), event.getY());
  45.  
  46. mFrame.addView(bubbleView);
  47. bubbleView.start();
  48.  
  49. return true;
  50. }
  51. });
  1. @Override
  2. public boolean onTouchEvent(MotionEvent event) {
  3.  
  4. // TODO - delegate the touch to the gestureDetector
  5.  
  6. return mGestureDetector.onTouchEvent(event);
  7.  
  8. }

定时任务

  1. // Start moving the BubbleView & updating the display
  2. private void start() {
  3.  
  4. // Creates a WorkerThread
  5. ScheduledExecutorService executor = Executors
  6. .newScheduledThreadPool(1);
  7.  
  8. // Execute the run() in Worker Thread every REFRESH_RATE
  9. // milliseconds
  10. // Save reference to this job in mMoverFuture
  11. mMoverFuture = executor.scheduleWithFixedDelay(new Runnable() {
  12. @Override
  13. public void run() {
  14. // TODO - implement movement logic.
  15. // Each time this method is run the BubbleView should
  16. // move one step. If the BubbleView exits the display,
  17. // stop the BubbleView's Worker Thread.
  18. // Otherwise, request that the BubbleView be redrawn.
  19. if(moveWhileOnScreen()){
  20. stop(false);
  21. }else{
  22. postInvalidate();
  23.  
  24. }
  25. }
  26. }, 0, REFRESH_RATE, TimeUnit.MILLISECONDS);
  27. }
  1. // Draw the Bubble at its current location
  2. @Override
  3. protected synchronized void onDraw(Canvas canvas) {
  4. super.onDraw(canvas);
  5. // TODO - save the canvas
  6. canvas.save();
  7.  
  8. // TODO - increase the rotation of the original image by mDRotate
  9. mRotate += mDRotate;
  10. // TODO Rotate the canvas by current rotation
  11. canvas.rotate(mRotate, mXPos + mScaledBitmapWidth/2, mYPos + mScaledBitmapWidth/2);
  12.  
  13. // TODO - draw the bitmap at it's new location
  14. canvas.drawBitmap(mScaledBitmap, mXPos, mYPos, mPainter);
  15.  
  16. // TODO - restore the canvas
  17. canvas.restore();
  18. }

注意canvas中画的图坐标不是在中心,而是左上角

  1. // Sound variables
  2.  
  3. // AudioManager
  4. private AudioManager mAudioManager;
  5. // SoundPool
  6. private SoundPool mSoundPool;
  7. // ID for the bubble popping sound
  8. private int mSoundID;
  9. // Audio volume
  10. private float mStreamVolume;
  11.  
  12. // Manage bubble popping sound
  13. // Use AudioManager.STREAM_MUSIC as stream type
  14.  
  15. mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
  16.  
  17. mStreamVolume = (float) mAudioManager
  18. .getStreamVolume(AudioManager.STREAM_MUSIC)
  19. / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  20.  
  21. // TODO - make a new SoundPool, allowing up to 10 streams
  22. mSoundPool = new SoundPool(, AudioManager.STREAM_MUSIC, );
  23.  
  24. // TODO - set a SoundPool OnLoadCompletedListener that calls setupGestureDetector()
  25. mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener(){
  26.  
  27. @Override
  28. public void onLoadComplete(SoundPool soundPool, int sampleId,
  29. int status) {
  30. if ( == status) {
  31. setupGestureDetector();
  32. }
  33. }
  34.  
  35. });
  36.  
  37. // TODO - load the sound from res/raw/bubble_pop.wav
  38. mSoundID = mSoundPool.load(this, R.raw.bubble_pop, );
  1. mSoundPool.play(mSoundID, mStreamVolume, mStreamVolume, , , 1.0f);

(updated on Mar 1th)Programming Mobile Applications for Android Handheld Systems by Dr. Adam Porter的更多相关文章

  1. Programming Impala Applications

    Programming Impala Applications The core development language with Impala is SQL. You can also use J ...

  2. PhoneGap与Jquery Mobile组合开发android应用的配置

    PhoneGap与Jquery Mobile结合开发android应用的配置 由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接 ...

  3. 使用jQuery Mobile + PhoneGap 开发Android应用程序(转)

    使用jQuery Mobile + PhoneGap 开发Android应用程序(转) 一.简介 jQuery Mobile是jQuery在手机上和平板设备上的版本.jQuery Mobile 不仅给 ...

  4. PhoneGap与Jquery Mobile结合开发android应用配置

    由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学 ...

  5. javascript判断设备类型-手机(mobile)、安卓(android)、电脑(pc)、其他(ipad/iPod/Windows)等

    使用device.js检测设备并实现不同设备展示不同网页 html代码: <!doctype html> <html> <head> <meta charse ...

  6. Signing Your Applications(Android签名相关)

    In this document Signing Overview Signing in Debug Mode Signing in Release Mode Signing Android Wear ...

  7. scaleform mobile sdk for android 多点触摸 修正

    修正 scaleform 的多点触控 (随手一记 给后来的人做个参考) scaleform 版本号 4.2.24 (估计这就是最后一个 移动版的版本了,万年没有更新了) 开始 一直以为 scalefo ...

  8. 无责任共享 Coursera、Udacity 等课程视频

    本文转载自网络,原作者不详. (本文是用 markdown 写的,访问 https://www.zybuluo.com/illuz/note/71868 获得更佳体验) 程序语言 interactiv ...

  9. [转]Android 学习资料分享(2015 版)

    转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...

随机推荐

  1. android 解压缩mac zip压缩文件

    之前被android unzip坑了一次,在此记录 使用java zip解压zip文件出现 java.util.zip.ZipException: unknown format 错误,zip文件在系统 ...

  2. Get Sauce(状压DP)

    描述 In order to celebrate the 8th anniversary of ZOJ, LCLL goes to a sauce factory to "Get Sauce ...

  3. Hadoop全分布式模式安装

    一.准备 1.准备至少三台linux服务器,并安装JDK 关闭防火墙如下 systemctl stop firewalld.service systemctl disable firewalld.se ...

  4. WIN下C开发环境搭建

    安装编译器 MinGW提供了一套简单方便的Winodows下的基于GCC程序开发环境 官网下载安装 http://www.mingw.org/ 打开后选择basic setup的package Ins ...

  5. Use of @OneToMany or @ManyToMany targeting an unmapped class:hibernate映射错误

    hibernate映射异常:Use of @OneToMany or @ManyToMany targeting an unmapped class 新建了PO以后,要把PO所在的目录加入到Hiber ...

  6. iOS学习笔记48-Swift(八)反射

    一.Swift反射 所谓反射就是可以动态获取类型.成员信息,在运行时可以调用方法.属性等行为的特性. 在使用OC开发时很少强调其反射概念,因为OC的Runtime要比其他语言中的反射强大的多.不过在S ...

  7. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  8. 用echarts.js制作中国地图,点击对应的省市链接到指定页面

    这里使用的是ECharts 2,因为用EChart 3制作的地图上的省市文字标识会有重叠,推测是引入的地图文件china.js,绘制文字的坐标方面的问题,所以,这里还是使用老版本. ECharts 2 ...

  9. HDU——1596find the safest road(邻接矩阵+优先队列SPFA)

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  10. 刷题总结——coneology(poj2932 扫描线)

    题目: Description A student named Round Square loved to play with cones. He would arrange cones with d ...