数码资讯
ImageView 圆角圆形图片设置,只需一句代码...
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
我们在使用ImageView时,不免需要显示图片为圆角矩形或者圆形的图片,在开发的过程中,使用最多的方法就是自定义控件
首先,自定义控件在Xml中定义时显得极不舒服,笔者就是这种感觉,
再者,自定义控件如果需要自定义属性的话,那么就需要在attr.xml中定义控件的属性,一个通用层控件一旦牵扯到res,就代表着他不能打成Jar,至少现在没有比较好的打包方法
所以笔者写了一个ImageView的工具类,而我们在为ImageView设置圆形图片时候,仅仅需要调用一句代码即可
ImageView image = (ImageView) findViewById(R.id.imageView1); image.setImageResource(R.drawable.img); //设置圆形图片 ImageViewUtils.setCircle(image);
看一看效果图 :
而相应的ImageViewUtil这个工具类中,我们实现了对ImageView的改变,或许对于正宗自定义控件来讲,这是一个取巧折中的方法,我们直接上代码,笔者打了较详细的注释
public class ImageViewUtils { //设置圆角矩形 public static void setRoundRect(ImageView image,int radius){ //获得ImageView的Drawable并且将其装换为Bitmap Bitmap bitmap = drawableToBitmap(image.getDrawable()); //这里是对Bitmap的一个重新绘制 Bitmap newBitmap = makeRoundCorner(bitmap,radius); //重新设置image的ImageBitmap image.setImageBitmap(newBitmap); } //设置圆形图片 //唯一的不同点是 bitmap的圆角半径由我们动态计算 //圆角半径刚刚是获得的Bitmap宽度的一半 //需要将ImageView设置为圆形,则宽度与高度必须相等,道理详细大家都懂 public static void setCircle(ImageView image){ //获得ImageView的Drawable并且将其装换为Bitmap Bitmap bitmap = drawableToBitmap(image.getDrawable()); //这里是对Bitmap的一个重新绘制 Bitmap newBitmap = makeRoundCorner(bitmap,bitmap.getWidth()/2); //重新设置image的ImageBitmap image.setImageBitmap(newBitmap); } //将Bitmap转换为圆角 public static Bitmap makeRoundCorner(Bitmap bitmap, int px) { //获得Bitmap的宽高 int width = bitmap.getWidth(); int height = bitmap.getHeight(); //创建需要返回的Bitmap Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //创建画板 Canvas canvas = new Canvas(output); int color = 0xff424242; //创建画笔 Paint paint = new Paint(); //内部矩形 Rect rect = new Rect(0, 0, width, height); //外部矩形 RectF rectF = new RectF(rect); //消除锯齿 paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); //画出圆角矩形 canvas.drawRoundRect(rectF, px, px, paint); //设置画笔的Xfermode SRC_IN 意思就是先绘制的圆角矩形和后绘制的Bitmap取相交部分 //且只留下SRC,也就是后绘制部分 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //绘制Bitmap canvas.drawBitmap(bitmap, rect, rect, paint); return output; } //Drawable => Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { //将从ImageView中获得的Drawable转换为Bitmap Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } }
代码并没有多难,大家希望通用的话可以打成Jar包引入项目中使用 希望会帮到你
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。