android 绘制圆形控件讲解

在开发中,常常会用到圆形头像,比如QQ中的头像,那么,这种圆形控件是怎么做出来的呢?很多大神的博客里面都有写,例如,
鸿洋的博客http://blog.csdn.net/lmj623565791/article/details/41967509。
我在这里不准备写一个圆形控件,主要讲解在绘制圆形控件的过程中需要用到的知识:

第一种方式,BitmapShader

1.Canvas 画布,用来绘制
2.Paint 画笔,可以设置颜色,粗细,抗锯齿等
前面两个是android开发自定义控件的过程中,在熟悉不过的。
3.BitmapShader android developer是这么说的(Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode. )Shader用来画某种结构的bitmap,bitmap位图通过设置可以重复,镜面等效果。

BitmapShader常用构造方法:
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY) 。这个方法,其实是把Bitmap,TitleMode等信息保存在对象中。
如果要对图象进行伸缩等操作,可以使用Matrix进行变换,然后通过BitmapShader.setLocalMatrix(matrix);设置。
当BitmapShader做完这些工作,又将传递给Paint。Paint.setShader(BitmapShader);

4.最后,则使用Canvas绘制。比如绘制圆形,drawCircle();

第二种方式,使用ShapeDrawable

1.ShapeDrawable
ShapeDrawable是什么?ShapeDrawable是继承的Drawable
(A Drawable object that draws primitive shapes. A ShapeDrawable takes a Shape object and manages its presence on the screen. If no Shape is given, then the ShapeDrawable will default to a RectShape.
This object can be defined in an XML file with the element.) ShapeDrawable 是能够绘制原始形状的Drawable,它带有一个Shape对象并管理Shape在屏幕上的显示。如果没有Shape,则默认是矩形。

1.ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());//构造带有椭圆的ShapeDrawable

2.ShapeDrawable带有Paint,
shapeDrawable.getPaint();获取Paint,
然后通过Paint设置shader。

3.最后调用setBounds设置显示区域,再使用draw()方法,将图形绘制出来。

下面插入第二种方式的关键代码

 //构建ShapeDrawable对象并定义形状为椭圆
        shapeDrawable = new ShapeDrawable(new OvalShape());
        //得到画笔并设置渲染器
        shapeDrawable.getPaint().setShader(mShader);
        int bSize = Math.max(bitmap.getWidth(), bitmap.getHeight());
        float scale = mWidth * 1.0f / bSize;
        // shader的变换矩阵,我们这里主要用于放大或者缩小
        mMatrix.setScale(scale, scale);
        // 设置变换矩阵
        mShader.setLocalMatrix(mMatrix);
        //设置显示区域
        shapeDrawable.setBounds(0, 0,mRadius*2,mRadius*2);
        //绘制shapeDrawable
        shapeDrawable.draw(canvas);

你可能感兴趣的:(android,控件,头像,圆形图片)