Android开发速成简洁教程十五:RadioButton及路径绘制

移动开发 Android
这个例子是绘制多边形,多义形和路径,采用单选钮RadioButton来选择Polys 和Path示例:UI设计为上部分用来显示绘图内容,下部分为两个单选按钮 Polys ,Path。这样layout就和main.xml 不一样,main.xml只含一个com.pstreets.graphics2d.GuidebeeGraphics2DView。

这个例子是绘制多边形,多义形和路径,采用单选钮RadioButton来选择Polys 和Path示例:

UI 设计为 上部分用来显示绘图内容,下部分为两个单选按钮 Polys ,Path。这样layout就和main.xml 不一样,main.xml只含一个com.pstreets.graphics2d.GuidebeeGraphics2DView。因此需在 res\layout下新建一个polys.xml:

  1. <?xml version=”1.0″ encoding=”utf-8″?> 
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” 
  3.     android:orientation=”vertical” 
  4.     android:background=”@drawable/white” 
  5.  android:layout_width=”fill_parent” 
  6.  android:layout_height=”fill_parent”> 
  7.     <com.pstreets.graphics2d.GuidebeeGraphics2DView 
  8.      android:id=”@+id/graphics2dview” 
  9.      android:layout_weight=”1″ 
  10.      android:layout_width=”fill_parent” 
  11.      android:layout_height=”wrap_content”/> 
  12.  <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” 
  13.   android:layout_width=”wrap_content” android:layout_height=”wrap_content” 
  14.   android:orientation=”horizontal” 
  15.    
  16.   > 
  17.   <RadioGroup 
  18.      android:layout_width=”wrap_content” 
  19.      android:orientation=”horizontal” 
  20.      android:textSize=”20dp” 
  21.      android:layout_height=”wrap_content”> 
  22.    <RadioButton android:text=”Polys” 
  23.        android:id=”@+id/radioPolys” 
  24.     android:layout_width=”wrap_content” 
  25.     android:textColor=”@color/black” 
  26.     android:checked=”true” 
  27.     android:layout_height=”wrap_content”> 
  28.    </RadioButton> 
  29.    <RadioButton android:text=”Path” 
  30.         android:id=”@+id/radioPath” 
  31.     android:layout_width=”wrap_content” 
  32.     android:textColor=”@color/black” 
  33.     android:layout_height=”wrap_content”> 
  34.    </RadioButton> 
  35.   </RadioGroup> 
  36.  </LinearLayout> 
  37.  
  38. </LinearLayout> 

RadioButton 需包含在RadioGroup中做为一个分组,这里将Polys 设为选中。

定义好Layout资源后,修改 Path.java

  1. private RadioButton radioPoly; 
  2.     private RadioButton radioPath;    
  3.     public void onCreate(Bundle savedInstanceState) { 
  4.      super.onCreate(savedInstanceState); 
  5.      setContentView(R.layout.polys); 
  6.      graphic2dView 
  7.       = (GuidebeeGraphics2DView) 
  8.         findViewById(R.id.graphics2dview); 
  9.      radioPath = (RadioButton) findViewById(R.id.radioPath); 
  10.      radioPoly = (RadioButton) findViewById(R.id.radioPolys); 
  11.      radioPath.setOnClickListener(this); 
  12.      radioPoly.setOnClickListener(this); 
  13.     } 

应为需要处理按键消息,所以定义了两个RadioButton对象,可以通过findViewById获取实例。因为两个RadioButton这里采用 同样的处理方法,可以让Path实现OnClickListener ,即:public class Path extends Graphics2DActivity   implements OnClickListener。完整代码如下:

  1. 1   public class Path extends Graphics2DActivity 
  2. 2      implements OnClickListener { 
  3. 3     
  4. 4       private RadioButton radioPoly; 
  5. 5       private RadioButton radioPath; 
  6. 6     
  7. 7       public void onCreate(Bundle savedInstanceState) { 
  8. 8           super.onCreate(savedInstanceState); 
  9. 9           setContentView(R.layout.polys); 
  10. 10          graphic2dView 
  11. 11           = (GuidebeeGraphics2DView) 
  12. 12             findViewById(R.id.graphics2dview); 
  13. 13          radioPath = (RadioButton) findViewById(R.id.radioPath); 
  14. 14          radioPoly = (RadioButton) findViewById(R.id.radioPolys); 
  15. 15          radioPath.setOnClickListener(this); 
  16. 16          radioPoly.setOnClickListener(this); 
  17. 17      } 
  18. 18    
  19. 19      @Override 
  20. 20      protected void drawImage() { 
  21. 21          if (radioPoly.isChecked()) { 
  22. 22              drawPolys(); 
  23. 23          } else { 
  24. 24              drawPaths(); 
  25. 25          } 
  26. 26          graphic2dView.refreshCanvas(); 
  27. 27    
  28. 28      } 
  29. 29    
  30. 30      @Override 
  31. 31      public void onClick(View view) { 
  32. 32          drawImage(); 
  33. 33      } 
  34. 34    
  35. 35      private void drawPaths() { 
  36. 36          AffineTransform mat1; 
  37. 37    
  38. 38          // The path. 
  39. 39          com.mapdigit.drawing.geometry.Path path; 
  40. 40    
  41. 41          // Colors 
  42. 42          Color redColor = new Color(0x96ff0000true); 
  43. 43          Color greenColor = new Color(0xff00ff00); 
  44. 44          Color blueColor = new Color(0x750000fftrue); 
  45. 45    
  46. 46          String pathdata 
  47. 47             = "M 60 20 Q -40 70 60 120 Q 160 70 60 20 z"
  48. 48          mat1 = new AffineTransform(); 
  49. 49          mat1.translate(3040); 
  50. 50          mat1.rotate(-30 * Math.PI / 180.0); 
  51. 51          path = com.mapdigit.drawing.geometry.Path.fromString(pathdata); 
  52. 52          // Clear the canvas with white color. 
  53. 53          graphics2D.clear(Color.WHITE); 
  54. 54    
  55. 55          graphics2D.setAffineTransform(new AffineTransform()); 
  56. 56          SolidBrush brush = new SolidBrush(greenColor); 
  57. 57          graphics2D.fill(brush, path); 
  58. 58          graphics2D.setAffineTransform(mat1); 
  59. 59    
  60. 60          brush = new SolidBrush(blueColor); 
  61. 61          com.mapdigit.drawing.Pen pen 
  62. 62             = new com.mapdigit.drawing.Pen(redColor, 5); 
  63. 63          graphics2D.setPenAndBrush(pen, brush); 
  64. 64          graphics2D.draw(null, path); 
  65. 65          graphics2D.fill(null, path); 
  66. 66    
  67. 67      } 
  68. 68    
  69. 69      private void drawPolys() { 
  70. 70          AffineTransform mat1; 
  71. 71    
  72. 72          // Colors 
  73. 73          Color redColor = new Color(0x96ff0000true); 
  74. 74          Color greenColor = new Color(0xff00ff00); 
  75. 75          Color blueColor = new Color(0x750000fftrue); 
  76. 76    
  77. 77          Polyline polyline; 
  78. 78          Polygon polygon; 
  79. 79          Polygon polygon1; 
  80. 80    
  81. 81          String pointsdata1 
  82. 82          = "59,45,95,63,108,105,82,139,39,140,11,107,19,65"
  83. 83          mat1 = new AffineTransform(); 
  84. 84          mat1.translate(3040); 
  85. 85          mat1.rotate(-30 * Math.PI / 180.0); 
  86. 86          polyline = new Polyline(); 
  87. 87          polygon = new Polygon(); 
  88. 88          polygon1 = new Polygon(); 
  89. 89          Point[] points = Point.fromString(pointsdata1); 
  90. 90          for (int i = 0; i < points.length; i++) { 
  91. 91              polyline.addPoint(points[i].x, points[i].y); 
  92. 92              polygon.addPoint(points[i].x, points[i].y); 
  93. 93              polygon1.addPoint(points[i].x, points[i].y); 
  94. 94          } 
  95. 95          // Clear the canvas with white color. 
  96. 96          graphics2D.clear(Color.WHITE); 
  97. 97    
  98. 98          graphics2D.setAffineTransform(new AffineTransform()); 
  99. 99          SolidBrush brush = new SolidBrush(greenColor); 
  100. 100         graphics2D.fillPolygon(brush, polygon); 
  101. 101         graphics2D.setAffineTransform(mat1); 
  102. 102   
  103. 103         brush = new SolidBrush(blueColor); 
  104. 104         com.mapdigit.drawing.Pen pen 
  105. 105            = new com.mapdigit.drawing.Pen(redColor, 5); 
  106. 106         graphics2D.setPenAndBrush(pen, brush); 
  107. 107         graphics2D.fillPolygon(null, polygon1); 
  108. 108         graphics2D.drawPolyline(null, polyline); 
  109. 109   
  110. 110     } 
  111. 111   
  112. 112 } 

责任编辑:闫佳明 来源: imobilebbs
相关推荐

2013-12-26 15:10:08

Android开发应用和框架Linux 内核

2013-12-26 15:43:07

Android开发Android应用Activities

2013-12-27 13:00:30

Android开发Android应用Context Men

2013-12-26 15:18:09

Android开发安装开发环境

2013-12-27 15:11:17

Android开发访问Internet绘制在线地图

2013-12-26 16:33:24

Android开发Android应用引路蜂二维图形绘制

2013-12-27 14:05:22

Android开发Android应用Dialog

2013-12-27 14:16:43

Android开发Android应用线程

2013-12-27 14:34:46

Android开发Android应用短信触发示例

2013-12-26 15:34:19

Android开发Android应用基本概念

2013-12-27 16:06:10

Android开发Android应用发布应用

2013-12-26 15:46:30

Android开发Android应用用户界面设计

2013-12-26 16:24:13

Android开发Android应用Intents

2013-12-27 12:51:44

Android开发Android应用引路蜂

2013-12-27 13:49:22

Android开发Android应用Button

2013-12-26 16:59:12

Android开发Android应用数据绑定Data Bi

2013-12-27 15:31:26

Android开发Android应用资源Resources

2013-12-26 16:46:21

2013-12-26 17:08:36

Android开发Android应用自定义Adapter显

2013-12-27 14:10:36

Android开发Android应用Transform
点赞
收藏

51CTO技术栈公众号