第102页
说明: 在上面的代码中,应用了字符串资源,这些资源均保存在res/values目录中的strings.xml文件中,具体代码请参见光盘。
(10)在默认创建的DrawActivity中,为实例添加选项菜单。
首先,重写onCreateOptionsMenu()方法,在该方法中,实例化一个MenuInflater对象,并调用该对象的inflate()方法解析步骤(9)中创建的菜单文件,具体代码如下:
//创建选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflator = new MenuInflater(this); //实例化一个MenuInflater对象
inflator.inflate(R.menu.toolsmenu, menu); //解析菜单文件
return super.onCreateOptionsMenu(menu);
}
然后,重写onOptionsItemSelected()方法,分别对各个菜单项被选择时做出相应的处理,具体代码如下:
//当菜单项被选择时,做出相应的处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
DrawView dv = (DrawView) findViewById(R.id.drawView1); //获取自定义的绘图视图
dv.paint.setXfermode(null); //取消擦除效果
dv.paint.setStrokeWidth(1); //初始化画笔的宽度
switch (item.getItemId()) {
case R.id.red:
dv.paint.setColor(Color.RED); //设置画笔的颜色为红色
item.setChecked(true);
break;
case R.id.green:
dv.paint.setColor(Color.GREEN); //设置画笔的颜色为绿色
item.setChecked(true);
break;
case R.id.blue:
dv.paint.setColor(Color.BLUE); //设置画笔的颜色为蓝色
item.setChecked(true);
break;
case R.id.width_1:
dv.paint.setStrokeWidth(1); //设置笔触的宽度为1像素
break;
case R.id.width_2:
dv.paint.setStrokeWidth(5); //设置笔触的宽度为5像素
break;
case R.id.width_3:
dv.paint.setStrokeWidth(10); //设置笔触的宽度为10像素
break;
case R.id.clear:
dv.clear(); //擦除绘画
break;
case R.id.save:
dv.save(); //保存绘画
break;
}
return true;
}
运行本实例,将显示一个简易涂鸦板,在屏幕上可以随意绘画,单击屏幕右上方的菜单按钮,将弹出选项菜单,主要用于完成更改画笔颜色、画笔宽度、擦除绘画和保存绘画功能。实例运行效果如图9.12所示。
图9.12 在简易涂鸦板上绘画
说明: 选择“保存绘画”菜单项,可以将当前绘图保存到SD卡的pictures目录中,文件名为myPicture.png。
9.3 为图形添加特效
教学录像:光盘\TM\lx\9\为图形添加特效.exe
在Android中,不仅可以绘制图形,还可以为图形添加特效。例如,对图形进行旋转、缩放、倾斜、平移和渲染等,下面将分别进行介绍。
9.3.1 旋转图像
使用Android提供的android.graphics.Matrix类的setRotate()、postRotate()和preRotate()方法,可以对图像进行旋转。
说明: 在Android API中,提供了setXXX()、postXXX()和preXXX()3种方法,其中,setXXX()方法用于直接设置Matrix的值,每使用一次setXXX()方法,整个Matrix都会改变;postXXX()方法用于采用后乘的方式为Matrix设置值,可以连续多次使用post完成多个变换;preXXX()方法用于采用前乘的方式为Matrix设置值,使用preXXX()方法设置的操作最先发生。
由于这3个方法除了方法名不同外,语法格式等均相同,下面将以setRotate()方法为例来进行介绍。setRotate()方法有以下两种语法格式。
[√]setRotate(float degrees)
使用该语法格式可以控制Matrix进行旋转,float类型的参数用于指定旋转的角度。例如,创建一个Matrix的对象,并将其旋转30°,可以使用下面的代码:
Matrix matrix=new Matrix(); //创建一个Matrix的对象
matrix.setRotate(30); //将Matrix的对象旋转30°
[√]setRotate(float degrees, float px, float py)
使用该语法格式可以控制Matrix以参数px和py为轴心进行旋转,float类型的参数用于指定旋转的角度。例如,创建一个Matrix的对象,并将其以(10,10)为轴心旋转30°,可以使用下面的代码: