Android设置圆形的ImageView

自定义圆形ImageView在Android中的实现
这篇博客主要介绍了如何在Android中创建一个显示为圆形的ImageView。作者从初学者的角度出发,通过新建一个继承自AppCompatImageView的类并重写onDraw()方法来实现。在重写的方法中,使用BitmapShader进行图片渲染,并通过Matrix进行图片裁剪,以达到圆形显示的效果。适合没有Java基础的Android初学者参考。

    初学andorid 遇到一个圆形的ImageView显示的需求,网上已经有了很多方法,网上找过很多资料,用重写ImageView Ondraw()方法加上自己的理解,整理了一下:

1.新建一个Imageview类,继承AppCompatImageView
2.重写一个ondraw方法
3.在Canvas画布中对图片进行裁剪

由于之前没有java基础,纯属初学摸索,所以查了很多基本的方法和元素并且注释。如果有不对的地方希望大家一起指正:

public class drawImg extends AppCompatImageView {
//定义画笔,消除锯齿:Paint.ANTI_ALIAS_FLAG
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//定义位图
private Bitmap mbitmap;
//图片渲染器,是shader渲染的子类,主要是对图片进行渲染的
private BitmapShader bitmapShader;
//定义矩阵,可以对矩阵内的图片进行缩放,渲染,裁剪,拉伸等操作

public class drawImg extends AppCompatImageView {
//定义画笔,消除锯齿:Paint.ANTI_ALIAS_FLAG
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//定义位图
private Bitmap mbitmap;
//图片渲染器,是shader渲染的子类,主要是对图片进行渲染的
private BitmapShader bitmapShader;
//定义矩阵,可以对矩阵内的图片进行缩放,渲染,裁剪,拉伸等操作
private Matrix matrix = new Matrix();

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

@Override
protected void onDraw(Canvas canvas) {
    Bitmap nbitmap = getBitmap(getDrawable());
    if (nbitmap != null) {
        int viewwidth = getWidth();
        int viewhight = getHeight();
        int viewminsize = Math.min(viewwidth, viewhight);
        float destwidth = viewminsize;
        float desthight = viewminsize;
        if (bitmapShader == null || !nbitmap.equals(mbitmap)) {
            mbitmap = nbitmap;
            bitmapShader = new BitmapShader(mbitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        }
        if (bitmapShader != null) {
            matrix.setScale(destwidth / nbitmap.getWidth(), desthight / nbitmap.getHeight());
            bitmapShader.setLocalMatrix(matrix);
        }
        paint.setShader(bitmapShader);
        float radius = viewminsize / 2.0f;
        canvas.drawCircle(radius, radius, radius, paint);

    } else {

        super.onDraw(canvas);
    }

}

//新建图片获取方法
private Bitmap getBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    } else if (drawable instanceof ColorDrawable) {
        // 获取边界
        Rect rect = drawable.getBounds();
        int width = rect.right- rect.left;
        int height = rect.bottom - rect.top;
        //获取图片颜色
        int color = ((ColorDrawable) drawable).getColor();
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
        return bitmap;
    } else {
        return null;
    }

}

然后再layout布局文件中包名加控件名称,就OK了
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值