Android开发速成简洁教程十三:Option Menu画笔示例

移动开发 Android
引路蜂二维图形画笔(Pen)示例含有四个示例,Lines ,Dashes ,LineJoin 和LineCap。打算采用Option Menu(主菜单)的方式来选择不同示例。

引路蜂二维图形画笔(Pen)示例含有四个示例,Lines ,Dashes ,LineJoin 和LineCap。打算采用Option Menu(主菜单)的方式来选择不同示例。

首先要对GuidebeeGraphics2DView,和Graphics2DActivity做些改动,从这个示例开 始,GuidebeeGraphics2DView需要动态绘制不同图形(可以通过菜单,或是Thread)。在 GuidebeeGraphics2DView增加下面两个方法:

  1. final Runnable updateCanvas = new Runnable() { 
  2.      public void run() { 
  3.       invalidate(); 
  4.      } 
  5.     };    
  6.     public void refreshCanvas(){ 
  7.      post(updateCanvas); 
  8.     } 

post可以用在非UI Thread中Call UI Thread中方法。这里只是触发屏幕重绘事件以刷新屏幕显示。

在Graphics2DActivity增加一个变量protected GuidebeeGraphics2DView graphic2dView; 来获得对应的GuidebeeGraphics2DView实例。

graphic2dView=(GuidebeeGraphics2DView)findViewById(R.id.graphics2dview);

使用Option Menu,尽管也可以完全使用代码来创建菜单,更一般的方法是使用菜单资源。在res 下创建menu 子目录,然后在res\menu下创建menu_option_line.xml 用来显示Pen的四个示例选项:

  1. <?xml version=”1.0″ encoding=”utf-8″?> 
  2. <menu 
  3.   xmlns:android=”http://schemas.android.com/apk/res/android“> 
  4. <item 
  5.  android:id=”@+id/mnuLines” 
  6.  android:title=”Lines” 
  7.  android:icon=”@drawable/icon1″> 
  8. </item> 
  9. <item 
  10.  android:id=”@+id/mnuDashes” 
  11.  android:title=”Dashes” 
  12.  android:icon=”@drawable/icon2″> 
  13. </item> 
  14. <item 
  15.  android:id=”@+id/mnuLineCap” 
  16.  android:title=”LineCap” 
  17.  android:icon=”@drawable/icon3″> 
  18. </item> 
  19. <item 
  20.  android:id=”@+id/mnuLineJoin” 
  21.  android:title=”LineJoin” 
  22.  android:icon=”@drawable/icon4″> 
  23. </item> 
  24. </menu> 

<menu></menu> 定义菜单,<item></item>定义菜单项,<item></item>可以嵌套以定义子菜单。 菜单可以定义id, Icon,Text等属性。也可以支持单选,多选,此时就需要借助<group></group>,使用group可以把一最菜 单项定义为一个组,可以使用setGroupVisible()来显示隐藏整个菜单组,Enable 或是Disable整个菜单组setGroupEnabled()等。最关键的,有了组才能实现菜单的单选和多选功能:

  1. <?xml version=”1.0″ encoding=”utf-8″?> 
  2. <menu xmlns:android=”http://schemas.android.com/apk/res/android“>    
  3.  <item android:id=”@+id/item1″          
  4.  android:icon=”@drawable/item1″          
  5.  android:title=”@string/item1″ />    
  6.  <!– menu group –>    
  7.  <group android:id=”@+id/group1″>        
  8.   <item android:id=”@+id/groupItem1″              
  9.   android:title=”@string/groupItem1″ />        
  10.   <item android:id=”@+id/groupItem2″              
  11.   android:title=”@string/groupItem2″ />    
  12.  </group> 
  13. </menu> 

定义好菜单资源后,就可以使用MenuInflater.inflate()展开菜单,一般需要在Activity的onCreateOptionsMenu()展开菜单:

  1. @Override 
  2.     public boolean onCreateOptionsMenu(Menu menu) { 
  3.      MenuInflater inflater = getMenuInflater(); 
  4.      inflater.inflate(R.menu.menu_option_line, menu); 
  5.      return true
  6.     } 

最后是响应菜单事件:

  1. @Override 
  2.     public boolean onOptionsItemSelected(MenuItem item) { 
  3.      menuOption = item.getItemId(); 
  4.      drawImage(); 
  5.      return true
  6.     } 

item.getItemId(); 返回菜单的ID(在菜单资源中定义)。

完整代码如下:

  1. 1 public class Pen extends Graphics2DActivity { 
  2. 2     
  3. 3    int menuOption; 
  4. 4     
  5. 5    @Override 
  6. 6    protected void drawImage() { 
  7. 7     switch (menuOption) { 
  8. 8     case R.id.mnuLines: 
  9. 9      drawLines(); 
  10. 10     break
  11. 11    
  12. 12    case R.id.mnuDashes: 
  13. 13     drawDash(); 
  14. 14     break
  15. 15    
  16. 16    case R.id.mnuLineCap: 
  17. 17     drawLineCap(); 
  18. 18     break
  19. 19    
  20. 20    case R.id.mnuLineJoin: 
  21. 21     drawLineJoin(); 
  22. 22     break
  23. 23    default
  24. 24     drawLines(); 
  25. 25     break
  26. 26    
  27. 27    } 
  28. 28    graphic2dView.refreshCanvas(); 
  29. 29    
  30. 30   } 
  31. 31    
  32. 32   @Override 
  33. 33   public boolean onCreateOptionsMenu(Menu menu) { 
  34. 34    MenuInflater inflater = getMenuInflater(); 
  35. 35    inflater.inflate(R.menu.menu_option_line, menu); 
  36. 36    return true
  37. 37   } 
  38. 38    
  39. 39   @Override 
  40. 40   public boolean onOptionsItemSelected(MenuItem item) { 
  41. 41    menuOption = item.getItemId(); 
  42. 42    drawImage(); 
  43. 43    return true
  44. 44   } 
  45. 45    
  46. 46   private void drawLineJoin() { 
  47. 47    Color blackColor = new Color(0xff000000); 
  48. 48    Color whiteColor = new Color(0xffffffff); 
  49. 49    
  50. 50    com.mapdigit.drawing.geometry.Path path 
  51. 51      = new com.mapdigit.drawing.geometry.Path(); 
  52. 52    path.moveTo(4060); 
  53. 53    path.lineTo(9020); 
  54. 54    path.lineTo(14060); 
  55. 55    // Clear the canvas with white color. 
  56. 56    graphics2D.clear(Color.WHITE); 
  57. 57    
  58. 58    AffineTransform matrix = new AffineTransform(); 
  59. 59    graphics2D.setAffineTransform(matrix); 
  60. 60    com.mapdigit.drawing.Pen pen 
  61. 61       = new com.mapdigit.drawing.Pen(blackColor, 
  62. 62      20, com.mapdigit.drawing.Pen.CAP_BUTT, 
  63. 63      com.mapdigit.drawing.Pen.JOIN_MITER); 
  64. 64    graphics2D.draw(pen, path); 
  65. 65    pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  66. 66    graphics2D.draw(pen, path); 
  67. 67    
  68. 68    matrix.translate(050); 
  69. 69    graphics2D.setAffineTransform(matrix); 
  70. 70    
  71. 71    pen = new com.mapdigit.drawing.Pen(blackColor, 20
  72. 72      com.mapdigit.drawing.Pen.CAP_BUTT, 
  73. 73      com.mapdigit.drawing.Pen.JOIN_ROUND); 
  74. 74    graphics2D.draw(pen, path); 
  75. 75    pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  76. 76    graphics2D.draw(pen, path); 
  77. 77    
  78. 78    matrix = new AffineTransform(); 
  79. 79    matrix.translate(0100); 
  80. 80    graphics2D.setAffineTransform(matrix); 
  81. 81    
  82. 82    pen = new com.mapdigit.drawing.Pen(blackColor, 20
  83. 83      com.mapdigit.drawing.Pen.CAP_BUTT, 
  84. 84      com.mapdigit.drawing.Pen.JOIN_BEVEL); 
  85. 85    graphics2D.draw(pen, path); 
  86. 86    pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  87. 87    graphics2D.draw(pen, path); 
  88. 88    
  89. 89   } 
  90. 90    
  91. 91   private void drawLineCap() { 
  92. 92    Color blackColor = new Color(0xff000000); 
  93. 93    Color whiteColor = new Color(0xffffffff); 
  94. 94    // Clear the canvas with white color. 
  95. 95    graphics2D.clear(Color.WHITE); 
  96. 96    AffineTransform matrix = new AffineTransform(); 
  97. 97    graphics2D.setAffineTransform(matrix); 
  98. 98    
  99. 99    com.mapdigit.drawing.Pen pen 
  100. 100       = new com.mapdigit.drawing.Pen(blackColor, 
  101. 101     20, com.mapdigit.drawing.Pen.CAP_BUTT, 
  102. 102     com.mapdigit.drawing.Pen.JOIN_MITER); 
  103. 103   graphics2D.drawLine(pen, 406014060); 
  104. 104   pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  105. 105   graphics2D.drawLine(pen, 406014060); 
  106. 106   
  107. 107   pen = new com.mapdigit.drawing.Pen(blackColor, 20
  108. 108     com.mapdigit.drawing.Pen.CAP_ROUND, 
  109. 109     com.mapdigit.drawing.Pen.JOIN_MITER); 
  110. 110   graphics2D.drawLine(pen, 40100140100); 
  111. 111   pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  112. 112   graphics2D.drawLine(pen, 40100140100); 
  113. 113   
  114. 114   pen = new com.mapdigit.drawing.Pen(blackColor, 20
  115. 115     com.mapdigit.drawing.Pen.CAP_SQUARE, 
  116. 116     com.mapdigit.drawing.Pen.JOIN_MITER); 
  117. 117   graphics2D.drawLine(pen, 40140140140); 
  118. 118   pen = new com.mapdigit.drawing.Pen(whiteColor, 1); 
  119. 119   graphics2D.drawLine(pen, 40140140140); 
  120. 120  } 
  121. 121   
  122. 122  private void drawLines() { 
  123. 123   Color greenColor = new Color(0xff00ff00); 
  124. 124   // Clear the canvas with white color. 
  125. 125   graphics2D.clear(Color.WHITE); 
  126. 126   AffineTransform matrix = new AffineTransform(); 
  127. 127   graphics2D.setAffineTransform(matrix); 
  128. 128   
  129. 129   com.mapdigit.drawing.Pen pen 
  130. 130     = new com.mapdigit.drawing.Pen(greenColor,1); 
  131. 131   graphics2D.drawLine(pen, 201506050); 
  132. 132   
  133. 133   pen = new com.mapdigit.drawing.Pen(greenColor, 2); 
  134. 134   graphics2D.drawLine(pen, 401508050); 
  135. 135   
  136. 136   pen = new com.mapdigit.drawing.Pen(greenColor, 3); 
  137. 137   graphics2D.drawLine(pen, 6015010050); 
  138. 138   
  139. 139   pen = new com.mapdigit.drawing.Pen(greenColor, 5); 
  140. 140   graphics2D.drawLine(pen, 8015012050); 
  141. 141   
  142. 142   pen = new com.mapdigit.drawing.Pen(greenColor, 7); 
  143. 143   graphics2D.drawLine(pen, 10015014050); 
  144. 144   
  145. 145   pen = new com.mapdigit.drawing.Pen(greenColor, 10); 
  146. 146   graphics2D.drawLine(pen, 12015016050); 
  147. 147   
  148. 148  } 
  149. 149   
  150. 150  private void drawDash() { 
  151. 151   Color blackColor = new Color(0xff000000); 
  152. 152   int dashArray1[] = { 22 }; 
  153. 153   int dashArray2[] = { 66 }; 
  154. 154   int dashArray3[] = { 412116 }; 
  155. 155   // Clear the canvas with white color. 
  156. 156   graphics2D.clear(Color.WHITE); 
  157. 157   AffineTransform matrix = new AffineTransform(); 
  158. 158   graphics2D.setAffineTransform(matrix); 
  159. 159   
  160. 160   com.mapdigit.drawing.Pen pen 
  161. 161       = new com.mapdigit.drawing.Pen(blackColor, 
  162. 162     20, com.mapdigit.drawing.Pen.CAP_BUTT, 
  163. 163     com.mapdigit.drawing.Pen.JOIN_MITER, dashArray1, 0); 
  164. 164   graphics2D.drawLine(pen, 406014060); 
  165. 165   
  166. 166   pen = new com.mapdigit.drawing.Pen(blackColor, 20
  167. 167     com.mapdigit.drawing.Pen.CAP_BUTT, 
  168. 168     com.mapdigit.drawing.Pen.JOIN_MITER, dashArray2, 0); 
  169. 169   graphics2D.drawLine(pen, 40100140100); 
  170. 170   
  171. 171   pen = new com.mapdigit.drawing.Pen(blackColor, 20
  172. 172     com.mapdigit.drawing.Pen.CAP_BUTT, 
  173. 173     com.mapdigit.drawing.Pen.JOIN_MITER, dashArray3, 0); 
  174. 174   graphics2D.drawLine(pen, 40140140140); 
  175. 175  } 
  176. 176 } 

 

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

2013-12-27 14:34:46

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

2013-12-27 16:06:10

Android开发Android应用发布应用

2013-12-27 13:00:30

Android开发Android应用Context Men

2013-12-27 13:49:22

Android开发Android应用Button

2013-12-26 15:10:08

Android开发应用和框架Linux 内核

2013-12-26 15:43:07

Android开发Android应用Activities

2013-12-26 15:18:09

Android开发安装开发环境

2013-12-27 14:05:22

Android开发Android应用Dialog

2013-12-27 14:16:43

Android开发Android应用线程

2013-12-26 15:34:19

Android开发Android应用基本概念

2013-12-27 13:27:05

Android开发Android应用RadioButton

2013-12-26 15:46:30

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

2013-12-26 16:24:13

Android开发Android应用Intents

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 15:11:17

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

2013-12-27 14:10:36

Android开发Android应用Transform

2013-12-27 12:42:15

Android开发Android应用引路蜂
点赞
收藏

51CTO技术栈公众号