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

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

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

finalRunnable updateCanvas =newRunnable() {

publicvoidrun() {

invalidate();

}

};

publicvoidrefreshCanvas(){

post(updateCanvas);

}

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的四个示例选项:

xmlns:android=”http://schemas.android.com/apk/res/android“>

android:id=”@+id/mnuLines”

android:title=”Lines”

android:icon=”@drawable/icon1″>

android:id=”@+id/mnuDashes”

android:title=”Dashes”

android:icon=”@drawable/icon2″>

android:id=”@+id/mnuLineCap”

android:title=”LineCap”

android:icon=”@drawable/icon3″>

android:id=”@+id/mnuLineJoin”

android:title=”LineJoin”

android:icon=”@drawable/icon4″>

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

android:icon=”@drawable/item1″

android:title=”@string/item1″/>

android:title=”@string/groupItem1″/>

android:title=”@string/groupItem2″/>

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

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.menu_option_line, menu);

returntrue;

}

最后是响应菜单事件:

@Override

publicbooleanonOptionsItemSelected(MenuItem item) {

menuOption = item.getItemId();

drawImage();

returntrue;

}

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

ef8f5c1e673d0c62eb63a461d1773e5b.png

完整代码如下:

1publicclassPenextendsGraphics2DActivity {

2

3intmenuOption;

4

5@Override

6protectedvoiddrawImage() {

7switch(menuOption) {

8caseR.id.mnuLines:

9drawLines();

10break;

11

12caseR.id.mnuDashes:

13drawDash();

14break;

15

16caseR.id.mnuLineCap:

17drawLineCap();

18break;

19

20caseR.id.mnuLineJoin:

21drawLineJoin();

22break;

23default:

24drawLines();

25break;

26

27}

28graphic2dView.refreshCanvas();

29

30}

31

32@Override

33publicbooleanonCreateOptionsMenu(Menu menu) {

34MenuInflater inflater = getMenuInflater();

35inflater.inflate(R.menu.menu_option_line, menu);

36returntrue;

37}

38

39@Override

40publicbooleanonOptionsItemSelected(MenuItem item) {

41menuOption = item.getItemId();

42drawImage();

43returntrue;

44}

45

46privatevoiddrawLineJoin() {

47Color blackColor =newColor(0xff000000);

48Color whiteColor =newColor(0xffffffff);

49

50com.mapdigit.drawing.geometry.Path path

51=newcom.mapdigit.drawing.geometry.Path();

52path.moveTo(40,60);

53path.lineTo(90,20);

54path.lineTo(140,60);

55// Clear the canvas with white color.

56graphics2D.clear(Color.WHITE);

57

58AffineTransform matrix =newAffineTransform();

59graphics2D.setAffineTransform(matrix);

60com.mapdigit.drawing.Pen pen

61=newcom.mapdigit.drawing.Pen(blackColor,

6220, com.mapdigit.drawing.Pen.CAP_BUTT,

63com.mapdigit.drawing.Pen.JOIN_MITER);

64graphics2D.draw(pen, path);

65pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

66graphics2D.draw(pen, path);

67

68matrix.translate(0,50);

69graphics2D.setAffineTransform(matrix);

70

71pen =newcom.mapdigit.drawing.Pen(blackColor,20,

72com.mapdigit.drawing.Pen.CAP_BUTT,

73com.mapdigit.drawing.Pen.JOIN_ROUND);

74graphics2D.draw(pen, path);

75pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

76graphics2D.draw(pen, path);

77

78matrix =newAffineTransform();

79matrix.translate(0,100);

80graphics2D.setAffineTransform(matrix);

81

82pen =newcom.mapdigit.drawing.Pen(blackColor,20,

83com.mapdigit.drawing.Pen.CAP_BUTT,

84com.mapdigit.drawing.Pen.JOIN_BEVEL);

85graphics2D.draw(pen, path);

86pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

87graphics2D.draw(pen, path);

88

89}

90

91privatevoiddrawLineCap() {

92Color blackColor =newColor(0xff000000);

93Color whiteColor =newColor(0xffffffff);

94// Clear the canvas with white color.

95graphics2D.clear(Color.WHITE);

96AffineTransform matrix =newAffineTransform();

97graphics2D.setAffineTransform(matrix);

98

99com.mapdigit.drawing.Pen pen

100=newcom.mapdigit.drawing.Pen(blackColor,

10120, com.mapdigit.drawing.Pen.CAP_BUTT,

102com.mapdigit.drawing.Pen.JOIN_MITER);

103graphics2D.drawLine(pen,40,60,140,60);

104pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

105graphics2D.drawLine(pen,40,60,140,60);

106

107pen =newcom.mapdigit.drawing.Pen(blackColor,20,

108com.mapdigit.drawing.Pen.CAP_ROUND,

109com.mapdigit.drawing.Pen.JOIN_MITER);

110graphics2D.drawLine(pen,40,100,140,100);

111pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

112graphics2D.drawLine(pen,40,100,140,100);

113

114pen =newcom.mapdigit.drawing.Pen(blackColor,20,

115com.mapdigit.drawing.Pen.CAP_SQUARE,

116com.mapdigit.drawing.Pen.JOIN_MITER);

117graphics2D.drawLine(pen,40,140,140,140);

118pen =newcom.mapdigit.drawing.Pen(whiteColor,1);

119graphics2D.drawLine(pen,40,140,140,140);

120}

121

122privatevoiddrawLines() {

123Color greenColor =newColor(0xff00ff00);

124// Clear the canvas with white color.

125graphics2D.clear(Color.WHITE);

126AffineTransform matrix =newAffineTransform();

127graphics2D.setAffineTransform(matrix);

128

129com.mapdigit.drawing.Pen pen

130=newcom.mapdigit.drawing.Pen(greenColor,1);

131graphics2D.drawLine(pen,20,150,60,50);

132

133pen =newcom.mapdigit.drawing.Pen(greenColor,2);

134graphics2D.drawLine(pen,40,150,80,50);

135

136pen =newcom.mapdigit.drawing.Pen(greenColor,3);

137graphics2D.drawLine(pen,60,150,100,50);

138

139pen =newcom.mapdigit.drawing.Pen(greenColor,5);

140graphics2D.drawLine(pen,80,150,120,50);

141

142pen =newcom.mapdigit.drawing.Pen(greenColor,7);

143graphics2D.drawLine(pen,100,150,140,50);

144

145pen =newcom.mapdigit.drawing.Pen(greenColor,10);

146graphics2D.drawLine(pen,120,150,160,50);

147

148}

149

150privatevoiddrawDash() {

151Color blackColor =newColor(0xff000000);

152intdashArray1[] = {2,2};

153intdashArray2[] = {6,6};

154intdashArray3[] = {4,1,2,1,1,6};

155// Clear the canvas with white color.

156graphics2D.clear(Color.WHITE);

157AffineTransform matrix =newAffineTransform();

158graphics2D.setAffineTransform(matrix);

159

160com.mapdigit.drawing.Pen pen

161=newcom.mapdigit.drawing.Pen(blackColor,

16220, com.mapdigit.drawing.Pen.CAP_BUTT,

163com.mapdigit.drawing.Pen.JOIN_MITER, dashArray1,0);

164graphics2D.drawLine(pen,40,60,140,60);

165

166pen =newcom.mapdigit.drawing.Pen(blackColor,20,

167com.mapdigit.drawing.Pen.CAP_BUTT,

168com.mapdigit.drawing.Pen.JOIN_MITER, dashArray2,0);

169graphics2D.drawLine(pen,40,100,140,100);

170

171pen =newcom.mapdigit.drawing.Pen(blackColor,20,

172com.mapdigit.drawing.Pen.CAP_BUTT,

173com.mapdigit.drawing.Pen.JOIN_MITER, dashArray3,0);

174graphics2D.drawLine(pen,40,140,140,140);

175}

176}

【编辑推荐】

【责任编辑:milk TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值