Android实现圆形图片

android实现圆形图片需要自定义ImageView控件,默认的ImageView是没有这样的效果,那么接下来就使用具体代码来实现。

创建ImageCircleView类继承于ImageView类

package com.tenghu.custom.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Xfermode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * 圆形图片
 * Created by Arvin_Li on 2014/10/15.
 */
public class ImageCircleView extends ImageView{
    private static final Xfermode MASK_XFERMODE;
    private Bitmap mask;
    private Paint paint;

    static{
        PorterDuff.Mode localMode=PorterDuff.Mode.DST_IN;
        MASK_XFERMODE=new PorterDuffXfermode(localMode);
    }

    public ImageCircleView(Context context,AttributeSet attrs,int defStyle){
        super(context, attrs, defStyle);
    }

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

    public ImageCircleView(Context context){
        super(context);
    }

    private Bitmap createCircleMap(){
        int w=getWidth();//获取图片的宽度
        int h=getHeight();//获取图片的高度
        Bitmap.Config localConfig=Bitmap.Config.ARGB_8888;
        Bitmap localBitmap=Bitmap.createBitmap(w,h,localConfig);
        Canvas canvas=new Canvas(localBitmap);//创建一个画板
        Paint paint=new Paint(1);//创建画笔
        paint.setColor(Color.WHITE);//设置画笔颜色
        RectF rectF=new RectF(0.0F,0.0F,w,h);
        //绘制一个椭圆
        canvas.drawOval(rectF,paint);
        return localBitmap;
    }

    @Override
    protected void onDraw(Canvas canvas) {
       Drawable drawable=getDrawable();
        if(null==drawable)
            super.onDraw(canvas);
        else{
            try {
                if(null==this.paint){
                    this.paint=new Paint();
                    this.paint.setFilterBitmap(false);
                    this.paint.setXfermode(MASK_XFERMODE);
                }
                int w=getWidth();//获取图片资源的宽度
                int h=getHeight();//获取图片资源的高度
                int i=canvas.saveLayer(0.0f,0.0f,w,h,null,31);
                drawable.setBounds(0,0,w,h);
                drawable.draw(canvas);
                if((null==this.mask)||(this.mask.isRecycled())){
                    this.mask=createCircleMap();
                }
                canvas.drawBitmap(this.mask,0.0F,0.0F,paint);
                canvas.restoreToCount(i);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
在xml中使用:

<com.tenghu.custom.view.ImageCircleView
        android:id="@+id/iv_head"
        android:layout_width="42dp"
        android:layout_height="42dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:layout_alignParentLeft="true"
        android:src="@drawable/face"/>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老虎Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值