美文网首页学习区Android开发者俱乐部Android学习
安卓日记——20行代码写一个CircleImageView

安卓日记——20行代码写一个CircleImageView

作者: 饥渴计科极客杰铿 | 来源:发表于2016-08-06 16:36 被阅读1306次

    一提到弄一个圆形的头像,很多人马上会想到用CircleIamgeView,但其实自己写一个也并不难自己写的部分也就20行代码,主要是用到PoterDuffXfermode来设置两个图层交集区域的显示方式

    首先写一个继承自ImageView的控件

    public class CircleImageView extends ImageView 
    

    然后创建构造方法

    public CircleImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    

    之后重写onDraw方法

    @Override
        protected void onDraw(Canvas canvas) {
            //获得图片的宽度
            int width=getWidth();
            //获得图片的高度
            int height=getHeight();
            //短的二分之一作为半径
            int radius=height>width?width/2:height/2;
    
            //重新定义的一个画布,这一步很关键
            Paint mPaint = new Paint();
            //抗锯齿
            mPaint.setAntiAlias(true);
            Bitmap bitmap = Bitmap.createBitmap(width,height,
                    Bitmap.Config.ARGB_8888);
            Canvas bitmapCanvas = new Canvas(bitmap);
            super.onDraw(bitmapCanvas);
    
            //圆形的框
            Bitmap cB = Bitmap.createBitmap(width, height,
                    Bitmap.Config.ARGB_8888);
            Canvas cCanv = new Canvas(cB);
            //在控件中间画一个
            cCanv.drawCircle(width/ 2, height/ 2, radius,
                    mPaint);
    
            canvas.drawBitmap(bitmap, 0.0f, 0.0f, mPaint);
            //dst是后画的图形
            mPaint.setXfermode(new PorterDuffXfermode(
                    PorterDuff.Mode.DST_IN));
            //一定要用之前的画布,不然会出现边角是黑色
            bitmapCanvas.drawBitmap(cB, 0.0f, 0.0f, mPaint);
            
            //给图形加边框
            Paint paint =new Paint();
            paint.setAntiAlias(true);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(5);
            paint.setColor(Color.BLACK);
            canvas.drawCircle(width/ 2, height/ 2, radius,
                    paint);
    
        }
    

    一个简单的CircleImageView就做成了,你们还可以把边框弄成一个属性还有配置相应的方法,让使用者更加方便的使用

    它的用法也是和ImageView一模一样的

    <com.example.jkgeekjk.roadtodevelop3.CircleImageView
           android:layout_width="match_parent"
           android:src="@drawable/avastar"
           android:layout_height="match_parent" />
    

    效果图

    效果图

    相关文章

      网友评论

      本文标题:安卓日记——20行代码写一个CircleImageView

      本文链接:https://www.haomeiwen.com/subject/nfiksttx.html