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. Android屏幕横屏竖屏设置技巧
  2. Android(安卓)图片拖动和缩放
  3. APIDEMO ACTIVITY 屏幕在出现软键盘情况下自适应大小
  4. Android(安卓)Screen Monitor抓取真机屏幕
  5. android锁屏唤醒并解锁屏幕
  6. Android屏幕自适应详解
  7. android View的快照与屏幕的截屏
  8. android游戏开发(三)触屏事件处理_手势识别
  9. android 屏幕自适应

随机推荐

  1. Android笔记之使用Toast
  2. Android(安卓)Studio “Cannot create di
  3. android 运用百度地图画轨迹
  4. Android编译问题
  5. 广播机制 笔记
  6. adb使用wifi无线连接调试Android设备
  7. Android(安卓)图片添加水印
  8. HttpURLconnection上传数据
  9. Android(安卓)socket通信app Client端
  10. 调用getChildFragmentManager时出现的Bug