乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第102页

书籍名:《Android从入门到精通》    作者:明日科技






































































说明:  在上面的代码中,应用了字符串资源,这些资源均保存在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°,可以使用下面的代码: