android imageview设置style,AndroidImageView绘制圆角效果

本文介绍了在Android开发中如何使用Xfermode和BitmapShader两种方法实现图片的圆角效果,包括自定义属性应用、自定义ImageView示例和不同显示模式的运用。通过实例演示,帮助开发者掌握圆形图片裁剪技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AndroidImageView绘制圆角效果

时间:2021-05-21

前言

Android 开发中,我们经常需要实现图片的圆形/圆角的效果,我们可以使用两种方式来实现这样的效果。一种是使用Xfermode,另一种是BitmapShader来实现。下面我将分别介绍这两种用法。

使用Xfermode的方式实现

使用该方式的关键代码,如下: private Bitmap creataBitmap(Bitmap bitmap) { //用指定的一个Bitmap来构建一个画布 Bitmap target = Bitmap.createBitmap(1000,1000, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(target); final Paint paint = new Paint(); paint.setColor(Color.GREEN); paint.setAntiAlias(true); //在刚才的画布上绘制一个圆形区域 canvas.drawCircle(500,500,500,paint); //设置Xfermode,使用SRC_IN模式,这样可以取到第二张图片重叠后的区域 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //在画布上绘制第二个需要显示的bitmap canvas.drawBitmap(bitmap,0,0,paint); return target; }

上面代码中看出在指定的画布上绘制了两层图像,一个是半径为500像素的圆形,一个是将目标Bitmap绘制在上面。之间还调用了paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));作用是这两个绘制的效果图叠加后,取得第二个图的交集图。所以,我们先绘制一个圆形,然后绘制Bitmap,交集为圆形,取出的就是圆形区域的Bitmap了。

PorterDuff.Mode中一共有16种效果显示,如下:

可以根据不同的Mode,控制显示的效果图。

开始应用

1.自定义属性在attrs.xml中<?xml version="1.0" encoding="utf-8"?>

2.自定义Viewpublic class RoundImageView extends View { private int type; private static final int TYPE_CIRCLE = 0; private static final int TYPE_ROUND = 1; //图片 private Bitmap mSrc; //圆角大小 private int mRadius; //高度 private int mWidth; //宽度 private int mHeight; public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); //获取自定义的属性 TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.RoundImageView); //获取自定以属性的数目 int count = a.getIndexCount(); for (int i=0 ; i

3.布局文件<?xml version="1.0" encoding="utf-8"?>

上面的自定义View中,存在一个局限,那就是只能在布局中设置要加载的图片资源,不能在代码中设置图片。下面我们使用同样的方式,选择自定义ImageView来实现。public class RoundImageView extends ImageView { private int type; private static final int TYPE_CIRCLE = 0; private static final int TYPE_ROUND = 1; //图片 private Bitmap mSrc; //圆角大小 private int mRadius; public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); //获取自定义的属性 TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.RoundImageView); //获取自定以属性的数目 int count = a.getIndexCount(); for (int i=0 ; i

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值