万书网 > 文学作品 > Android从入门到精通 > 第106页

第106页




canvas.drawRect(0,  0,  view_width,  view_height,  paint);  //绘制一个使用BitmapShader渲染的矩形



Bitmap  bm=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.img02);



//创建一个在水平方向上重复,在垂直方向上镜像的BitmapShader对象



BitmapShader  bs=  new  BitmapShader(bm,TileMode.REPEAT,TileMode.MIRROR);



paint.setShader(bs);  //设置渲染对象



RectF  oval=new  RectF(0,0,280,180);



canvas.translate(40,  20);  //将画面在X轴上平移40像素,在Y轴上平移20像素



canvas.drawOval(oval,  paint);  //绘制一个使用BitmapShader渲染的椭圆形

运行本实例,将显示如图9.17所示的运行结果。



图9.17 显示平铺背景和椭圆形的图片

9.3.6 范例1:实现带描边的圆角图片

例9.14   在Eclipse中创建Android项目,名称为9.14,实现带描边的圆角图片。(实例位置:光盘\TM\sl\9\9.14)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。

(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas  canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。

(3)在MyView的onDraw()方法中,首先定义一个画笔,并绘制一张背景图像,然后定义一个要绘制的圆角矩形的区域,并将画布在X轴上平移40像素,在Y轴上平移20像素,再绘制一个黑色的2像素的圆角矩形,作为图片的描边,最后绘制一个使用BitmapShader渲染的圆角矩形图片,具体代码如下:

Paint  paint=new  Paint();  //定义一个画笔



paint.setAntiAlias(true);  //使用抗锯齿功能



Bitmap  bitmap_bg=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.background);



canvas.drawBitmap(bitmap_bg,  0,  0,  paint);  //绘制背景



RectF  rect=new  RectF(0,0,280,180);



canvas.translate(40,  20);  //将画布在X轴上平移40像素,在Y轴上平移20像素



//为图片添加描边



paint.setStyle(Style.STROKE);  //设置填充样式为描边



paint.setColor(Color.BLACK);  //设置颜色为黑色



paint.setStrokeWidth(2);  //设置笔触宽度为2像素



canvas.drawRoundRect(rect,  10,  10,  paint);  //绘制一个描边的圆角矩形



paint.setStyle(Style.FILL);  //设置填充样式为填充



Bitmap  bm=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.img02);



//创建一个在水平方向上重复,在垂直方向上镜像的BitmapShader对象



BitmapShader  bs=  new  BitmapShader(bm,TileMode.REPEAT,TileMode.MIRROR);



paint.setShader(bs);  //设置渲染对象



canvas.drawRoundRect(rect,  10,  10,  paint);  //绘制一个使用BitmapShader渲染的圆角矩形图片

运行本实例,将显示如图9.18所示的运行结果。



图9.18 绘制带描边的圆角图片

9.3.7 范例2:实现放大镜效果

例9.15   在Eclipse中创建Android项目,名称为9.15,实现放大镜效果。(实例位置:光盘\TM\sl\9\9.15)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。

(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas  canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。

(3)在内部类MyView中,定义源图像、放大镜图像、放大镜的半径、放大倍数、放大镜的左边距和顶边距等,具体代码如下:

private  Bitmap  bitmap;  //源图像,也就是背景图像



private  ShapeDrawable  drawable;



private  final  int  RADIUS  =  57;  //放大镜的半径



private  final  int  FACTOR  =  2;  //放大倍数



private  Matrix  matrix  =  new  Matrix();



private  Bitmap  bitmap_magnifier;  //放大镜位图



private  int  m_left  =  0;  //放大镜的左边距



private  int  m_top  =  0;  //放大镜的顶边距

(4)在内部类MyView的构造方法中,首先获取要显示的源图像,然后创建一个BitmapShader对象,用于指定渲染图像,接下来创建一个圆形的drawable,并设置相关属性,最后获取放大镜图像,并计算放大镜的默认左、右边距,具体代码如下:

Bitmap  bitmap_source  =  BitmapFactory.decodeResource(getResources(),



R.drawable.source);  //获取要显示的源图像



bitmap  =  bitmap_source;



BitmapShader  shader  =  new  BitmapShader(Bitmap.createScaledBitmap(