1. packagecom.jacp.test;
  2. importAndroid.app.Activity;
  3. importAndroid.content.Context;
  4. importAndroid.graphics.Canvas;
  5. importAndroid.graphics.Color;
  6. importAndroid.graphics.Paint;
  7. importAndroid.graphics.Rect;
  8. importAndroid.graphics.RectF;
  9. importAndroid.os.Bundle;
  10. importAndroid.util.DisplayMetrics;
  11. importAndroid.view.MotionEvent;
  12. importAndroid.view.View;
  13. importAndroid.widget.Toast;
  14. publicclassDrawSimpleCircleextendsActivity{
  15. publicvoidonCreate(BundlesavedInstanceState){
  16. super.onCreate(savedInstanceState);
  17. DisplayMetricsmetrics=newDisplayMetrics();
  18. this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
  19. //屏幕的分辨率
  20. intwidth=metrics.widthPixels;
  21. intheight=metrics.heightPixels;
  22. setContentView(newMyCircle(this,width,height));
  23. }
  24. classMyCircleextendsView{
  25. privateContextcontext;
  26. /**
  27. *屏幕的宽
  28. */
  29. privateintwidth;
  30. /**
  31. *屏幕的高
  32. */
  33. privateintheight;
  34. /**
  35. *颜色区分区域
  36. */
  37. privateint[]colors=newint[]{Color.BLACK,Color.BLUE,Color.CYAN,
  38. Color.GREEN,Color.GRAY,Color.MAGENTA,Color.RED,Color.LTGRAY};
  39. privateString[]colorStrs=newString[]{
  40. "黑色","蓝色","青绿色","绿色","灰色","洋红色","红色","浅灰色"};
  41. /**
  42. *大园半径
  43. */
  44. privatefloatbigR;
  45. /**
  46. *小圆半径
  47. */
  48. privatefloatlitterR;
  49. /**
  50. *屏幕中间点的X坐标
  51. */
  52. privatefloatcenterX;
  53. /**
  54. *屏幕中间点的Y坐标
  55. */
  56. privatefloatcenterY;
  57. publicMyCircle(Contextcontext,intwidth,intheight){
  58. super(context);
  59. this.context=context;
  60. this.width=width;
  61. this.height=height;
  62. setFocusable(true);
  63. System.out.println("width="+width+"<---->height="+height);
  64. //设置两个圆的半径
  65. bigR=(width-20)/2;
  66. litterR=bigR/2;
  67. centerX=width/2;
  68. centerY=height/2;
  69. }
  70. @Override
  71. protectedvoidonDraw(Canvascanvas){
  72. //画背景颜色
  73. Paintbg=newPaint();
  74. bg.setColor(Color.WHITE);
  75. RectbgR=newRect(0,0,width,height);
  76. canvas.drawRect(bgR,bg);
  77. floatstart=0F;
  78. Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  79. for(inti=0;i<4;i++){
  80. //注意一定要先画大圆,再画小圆,不然看不到效果,小圆在下面会被大圆覆盖
  81. //画大圆
  82. RectFbigOval=newRectF(centerX-bigR,centerY-bigR,
  83. centerX+bigR,centerY+bigR);
  84. paint.setColor(colors[i]);
  85. canvas.drawArc(bigOval,start,90,true,paint);
  86. //画小圆
  87. RectFlitterOval=newRectF(centerX-litterR,centerY-litterR,
  88. centerX+litterR,centerY+litterR);
  89. paint.setColor(colors[i+2]);
  90. canvas.drawArc(litterOval,start,90,true,paint);
  91. start+=90F;
  92. }
  93. super.onDraw(canvas);
  94. }
  95. @Override
  96. publicbooleanonTouchEvent(MotionEventevent){
  97. //获取点击屏幕时的点的坐标
  98. floatx=event.getX();
  99. floaty=event.getY();
  100. whichCircle(x,y);
  101. returnsuper.onTouchEvent(event);
  102. }
  103. /**
  104. *确定点击的点在哪个圆内
  105. *@paramx
  106. *@paramy
  107. */
  108. privatevoidwhichCircle(floatx,floaty){
  109. //将屏幕中的点转换成以屏幕中心为原点的坐标点
  110. floatmx=x-centerX;
  111. floatmy=y-centerY;
  112. floatresult=mx*mx+my*my;
  113. StringBuildertip=newStringBuilder();
  114. tip.append("您点击了");
  115. //高中的解析几何
  116. if(result<=litterR*litterR){//点击的点在小圆内
  117. tip.append("小圆的");
  118. tip.append(colorStrs[whichZone(mx,my)+2]);
  119. tip.append("区域");
  120. }elseif(result<=bigR*bigR){//点击的点在大圆内
  121. tip.append("大圆的");
  122. tip.append(colorStrs[whichZone(mx,my)]);
  123. tip.append("区域");
  124. }else{//点不在作作区域
  125. tip.append("作用区域以外的区域");
  126. }
  127. Toast.makeText(context,tip,Toast.LENGTH_SHORT).show();
  128. }
  129. /**
  130. *判断点击了圆的哪个区域
  131. *@paramx
  132. *@paramy
  133. *@return
  134. */
  135. privateintwhichZone(floatx,floaty){
  136. //简单的象限点处理
  137. //第一象限在右下角,第二象限在左下角,代数里面的是逆时针,这里是顺时针
  138. if(x>0&&y>0){
  139. return0;
  140. }elseif(x>0&&y<0){
  141. return3;
  142. }elseif(x<0&&y<0){
  143. return2;
  144. }elseif(x<0&&y>0){
  145. return1;
  146. }
  147. return-1;
  148. }
  149. }
  150. }

更多相关文章

  1. APIDEMO ACTIVITY 屏幕在出现软键盘情况下自适应大小
  2. Android Screen Monitor抓取真机屏幕
  3. android锁屏唤醒并解锁屏幕
  4. Android屏幕自适应详解
  5. android View的快照与屏幕的截屏
  6. Android屏幕尺寸详解
  7. Qt on Android:怎样适应不同的屏幕尺寸
  8. Android 支持不同(本地化、屏幕、版本)设备

随机推荐

  1. android CoordinatorLayout里viewpager占
  2. Android(安卓)8.1 沉浸式状态栏
  3. 修改Android的开关机铃声、Android开关机
  4. Android版本号与API级别对应关系表
  5. First project in android
  6. Qt_Qtopia与Android的进程间通讯方式
  7. android layout_weight的理解
  8. Android(安卓)studio 弹出式菜单和上下文
  9. 动态库so打包到android apk
  10. Android之获取、设置EditText的文本...