相关文章推荐
年轻有为的签字笔  ·  SlipPrintJob.PrintBitm ...·  2 月前    · 
聪明的作业本  ·  Advanced query ...·  11 月前    · 
玩滑板的移动电源  ·  如何让我的电子自动更新程序工作?_javas ...·  1 年前    · 
酷酷的猴子  ·  python 截取两个字符串中间的字符串-掘金·  1 年前    · 
风流倜傥的金针菇  ·  java.io.eofexception ...·  2 年前    · 
不羁的书签  ·  OpenGL内存泄漏引发的血案 - 掘金·  2 年前    · 
Code  ›  Android实现自定义ImageView的圆角矩形图片效果开发者社区
context rect bitmap
https://cloud.tencent.com/developer/article/1743081
率性的红酒
1 年前
作者头像
砸漏
0 篇文章

Android实现自定义ImageView的圆角矩形图片效果

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 恩蓝脚本 > Android实现自定义ImageView的圆角矩形图片效果

Android实现自定义ImageView的圆角矩形图片效果

作者头像
砸漏
发布 于 2020-11-05 14:46:21
1.7K 0
发布 于 2020-11-05 14:46:21
举报

android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪对应的圆角矩形的bitmap,然后在onDraw()进行绘制圆角矩形图片输出。

效果图如下:

自定义的圆形的ImageView类的实现代码如下:

package com.xc.xcskin.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
 * 自定义的圆角矩形ImageView,可以直接当组件在布局中使用。
 * @author caizhiming
public class XCRoundRectImageView extends ImageView{
 private Paint paint;
 public XCRoundRectImageView(Context context) { 
 this(context,null); 
 public XCRoundRectImageView(Context context, AttributeSet attrs) { 
 this(context, attrs,0); 
 public XCRoundRectImageView(Context context, AttributeSet attrs, int defStyle) { 
 super(context, attrs, defStyle); 
 paint = new Paint();
 * 绘制圆角矩形图片
 * @author caizhiming
 @Override 
 protected void onDraw(Canvas canvas) { 
 Drawable drawable = getDrawable(); 
 if (null != drawable) { 
 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
 Bitmap b = getRoundBitmap(bitmap, 20); 
 final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight()); 
 final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
 paint.reset(); 
 canvas.drawBitmap(b, rectSrc, rectDest, paint); 
 } else { 
 super.onDraw(canvas); 
 * 获取圆角矩形图片方法
 * @param bitmap
 * @param roundPx,一般设置成14
 * @return Bitmap
 * @author caizhiming
 private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) { 
 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
 bitmap.getHeight(), Config.ARGB_8888); 
 Canvas canvas = new Canvas(output); 
 final int color = 0xff424242;
 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
 final RectF rectF = new RectF(rect);
 paint.setAntiAlias(true); 
 canvas.drawARGB(0, 0, 0, 0); 
 paint.setColor(color); 
 int x = bitmap.getWidth(); 
 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
 canvas.drawBitmap(bitmap, rect, rect, paint); 
 return output; 
} 

完成这个自定义类后,就可以使用这个类了,就是把这个当组件在布局中使用即可,比如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"   
 <com.xc.xcskin.view.XCRoundRectImageView
 android:id="@+id/roundRectImageView" 
 android:layout_centerInParent="true" 
 
推荐文章
年轻有为的签字笔  ·  SlipPrintJob.PrintBitmap Method (Windows.Devices.PointOfService) - Windows apps | Microsoft Learn
2 月前
聪明的作业本  ·  Advanced query capabilities on Microsoft Entra ID objects - Microsoft Graph | Microsoft Learn
11 月前
玩滑板的移动电源  ·  如何让我的电子自动更新程序工作?_javascript_Vue小助理-Vue
1 年前
酷酷的猴子  ·  python 截取两个字符串中间的字符串-掘金
1 年前
风流倜傥的金针菇  ·  java.io.eofexception n not found limit=0 content=-掘金
2 年前
不羁的书签  ·  OpenGL内存泄漏引发的血案 - 掘金
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号