Android中的图片圆角怎么实现
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2025年11月15日Android中的图片圆角怎么实现
这篇文章主要介绍了Android中的图片圆角怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中的图片圆角怎么实现文章都会有所收获,下面我们一起来看看吧。
Android 开发中,经常需要对图片进行二次处理,比如添加圆角效果 或 显示圆形图片;
方法一
通过第三方框架 Glide 设置圆角效果;
写法1:
RequestOptions options = new RequestOptions().error(R.drawable.img_load_failure).bitmapTransform(new RoundedCorners(30));//图片圆角为30Glide.with(this).load(URL) //图片地址 .apply(options) .into(ImagView);
写法2:
RequestOptions requestOptions = new RequestOptions();requestOptions.placeholder(R.drawable.ic_launcher_background);requestOptions.circleCropTransform();requestOptions.transforms( new RoundedCorners(30));Glide.with(this).load(URL) //图片地址 .apply(options) .into(ImagView);
写法3:
RequestOptions options = new RequestOptions().centerCrop() .transform(new RoundTransform(this,30)); Glide.with(this).load(URL) //图片地址 .apply(options) .into(ImagView);
public class RoundTransform extends BitmapTransformation { private static float radius = 0f; public RoundTransform(Context context) { this(context, 4); } public RoundTransform(Context context, int dp) { super(context); this.radius = Resources.getSystem().getDisplayMetrics().density * dp; } @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight); return roundCrop(pool, bitmap); } private static Bitmap roundCrop(BitmapPool pool, Bitmap source) { if (source == null) return null; Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); if (result == null) { result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(result); Paint paint = new Paint(); paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(true); RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight()); canvas.drawRoundRect(rectF, radius, radius, paint); return result; } public String getId() { return getClass().getName() + Math.round(radius); } @Override public void updateDiskCacheKey(MessageDigest messageDigest) { }}方法二
自定义ImageView 设置圆角效果;
ImageView iv = findViewById(R.id.iv); Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.fengjing); Bitmap outBitmap =getRoundBitmapByShader(bitmap, 500,300,20, 3); iv.setImageBitmap(outBitmap);
public class RoundRectImageView extends ImageView{ private Paint paint; public RoundRectImageView(Context context) { this(context,null); } public RoundRectImageView(Context context, AttributeSet attrs) { this(context, attrs,0); } public RoundRectImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); paint = new Paint(); } /** * 绘制圆角矩形图片 */ @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (null != drawable) { Bitmap bitmap = getBitmapFromDrawable(drawable);// Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); Bitmap b = getRoundBitmapByShader(bitmap,getWidth(),getHeight(), 50,0); 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); } } /** * 把资源图片转换成Bitmap * @param drawable * 资源图片 * @return 位图 */ public static Bitmap getBitmapFromDrawable(Drawable drawable) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, drawable .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); //drawable.setBounds(-4, -4, width + 4, height + 4); drawable.draw(canvas); return bitmap; } public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) { if (bitmap == null) { return null; } int width = bitmap.getWidth(); int height = bitmap.getHeight(); float widthScale = outWidth * 1f / width; float heightScale = outHeight * 1f / height; Matrix matrix = new Matrix(); matrix.setScale(widthScale, heightScale); //创建输出的bitmap Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888); //创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上 Canvas canvas = new Canvas(desBitmap); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); //创建着色器 BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //给着色器配置matrix bitmapShader.setLocalMatrix(matrix); paint.setShader(bitmapShader); //创建矩形区域并且预留出border RectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder); //把传入的bitmap绘制到圆角矩形区域内 canvas.drawRoundRect(rect, radius, radius, paint); if (boarder > 0) { //绘制boarder Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); boarderPaint.setColor(Color.GREEN); boarderPaint.setStyle(Paint.Style.STROKE); boarderPaint.setStrokeWidth(boarder); canvas.drawRoundRect(rect, radius, radius, boarderPaint); } return desBitmap; } }方法三
对图片进行处理,还可以加边框;
/** * 通过BitmapShader实现圆形边框 * @param bitmap * @param outWidth 输出的图片宽度 * @param outHeight 输出的图片高度 * @param radius 圆角大小 * @param boarder 边框宽度 */public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) { if (bitmap == null) { return null; } int height = bitmap.getHeight(); int width = bitmap.getWidth(); float widthScale = outWidth * 1f / width; float heightScale = outHeight * 1f / height; Matrix matrix = new Matrix(); matrix.setScale(widthScale, heightScale); //创建输出的bitmap Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888); //创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上 Canvas canvas = new Canvas(desBitmap); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); //创建着色器 BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //给着色器配置matrix bitmapShader.setLocalMatrix(matrix); paint.setShader(bitmapShader); //创建矩形区域并且预留出border RectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder); //把传入的bitmap绘制到圆角矩形区域内 canvas.drawRoundRect(rect, radius, radius, paint); if (boarder > 0) { //绘制boarder Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); boarderPaint.setColor(Color.GREEN); boarderPaint.setStyle(Paint.Style.STROKE); boarderPaint.setStrokeWidth(boarder); canvas.drawRoundRect(rect, radius, radius, boarderPaint); } return desBitmap;}实现圆形和边框:
/** * 通过BitmapShader实现圆形边框 * @param bitmap * @param outWidth 输出的图片宽度 * @param outHeight 输出的图片高度 * @param boarder 边框大小 */public static Bitmap getCircleBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int boarder) {int radius;int width = bitmap.getWidth();int height = bitmap.getHeight();float widthScale = outWidth * 1f / width;float heightScale = outHeight * 1f / height; Bitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);if (outHeight > outWidth) { radius = outWidth / 2;} else { radius = outHeight / 2;}//创建canvasCanvas canvas = new Canvas(desBitmap);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);Matrix matrix = new Matrix();matrix.setScale(widthScale, heightScale);bitmapShader.setLocalMatrix(matrix);paint.setShader(bitmapShader);canvas.drawCircle(outWidth / 2, outHeight / 2, radius - boarder, paint);if (boarder > 0) { //绘制boarder Paint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); boarderPaint.setColor(Color.GREEN); boarderPaint.setStyle(Paint.Style.STROKE); boarderPaint.setStrokeWidth(boarder); canvas.drawCircle(outWidth / 2, outHeight / 2, radius - boarder, boarderPaint);}return desBitmap;}关于"Android中的图片圆角怎么实现"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Android中的图片圆角怎么实现"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
图片
圆角
边框
输出
矩形
内容
区域
圆形
写法
地址
宽度
效果
方法
知识
大小
篇文章
资源
高度
处理
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库系统安全控制
数据库报错2203
网络技术范围怎么求
网络安全技术练习题答案
云服务器防护软件哪个好用
唯赢4g服务器下载
网络安全道德品质小报内容
门户网站数据库设计
基岩服务器搭建
福州app手机软件开发
关闭数据库提示信息
未来网络安全市场规模
批量导入省略数据库已存在数据
网络安全与支付500字
学生网络安全宣讲
河北共筑网络安全防线
服务器需要安装安全狗吗
网络安全专业大学排名及录取
app后台有几个服务器
数据库启动右下角不显示
360朋友专享网络安全吗
服务器更新通知
俄罗斯网络安全中心
易云计算机互联网科技有限公司
阿里云买的服务器域名配置
在数据库my
网络安全保险核心门槛
互联网和科技发展
网络安全故障解决方案
沈阳派禾网络技术有限公司