Android 绘制圆形图片
Android 图片 绘制 圆形
2023-09-11 14:14:42 时间
经常在项目中,会遇到使用圆形头像。
然而图片往往不是圆形的,我们须要对图片进行处理。以达到圆形图片的效果。这里。我总结了一下经常使用的android圆形图片的绘制的方法。
主要有以下几种方式:1.画布裁剪;2.Xfermode进行重叠。3使用着色器shader。
以下我们将一个一个进行描写叙述:
第一种,画布裁剪:通过创建空白的Bitmap生成canvas画布,然后将画布进行裁剪成圆形,最后在画布上进行绘制。见代码:
/** * 通过裁剪画布 * * @param bitmap * @return */ public static Bitmap clipDrawable(Bitmap bitmap) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); int min = Math.min(width, height); //通过新建一个Bitmap创建一个画布 Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bp); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.BLACK); //创建圆形路径,用于画布裁剪 Path path = new Path(); path.addCircle(min / 2, min / 2, min / 2, Path.Direction.CCW); canvas.clipPath(path); //在裁剪后的画布上进行绘制 canvas.drawBitmap(bitmap, -width / 2 + min / 2, -height / 2 + min / 2, paint); return bp; }
另外一种。Xfermode:我们使用Xfermode的src_in模式,将原始图片和圆形进行重叠,得到重叠的圆形部分。
/** * 通过Xfermode * * @param bitmap * @return */ public static Bitmap getCircleBitmap(Bitmap bitmap) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); int min = Math.min(width, height); //通过新建一个Bitmap创建一个画布 Bitmap bp = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.GRAY); Canvas canvas = new Canvas(bp); canvas.drawCircle(min / 2, min / 2, min / 2, paint); //设置模式为取重叠的部分 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); // paint.setColorFilter(new LightingColorFilter(0xFFFFFF00, 0x00000000)); // canvas.drawBitmap(bitmap, min / 2 - width / 2, min / 2 - height / 2, paint); canvas.drawBitmap(bitmap, null, new Rect(min / 2 - width / 2, min / 2 - height / 2, width / 2 + min / 2, height / 2 + min / 2), paint); return bp; }
第三种,shader着色器:给画笔设置着色器,最后使用这个画笔绘制圆形。
/** * 通过shader */ public static Bitmap getShaderBitmap(Bitmap bitmap) { Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.GRAY); //设置着色器 paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int r = Math.min(width, height) / 2; Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bp); //在圆形中进行着色 canvas.drawCircle(width/2, height/2, r, paint); return bp; }
整体来说,绘制的方法大致如上所述。大家能够针对自己的需求进行改动。
上面的代码写的demo,所以命名方面比較任意,请大家谅解。假设有什么错误的地方,请大家指正,不甚感激。
相关文章
- 精通Android自定义View(九)绘制篇Canvas分析之绘制图片
- Android应用性能优化最佳实践.1.3 Android Studio实用技巧
- 【Android开发】算法题合集(十)机器人能否返回原点和计数二进制子串
- Android USB转串口开发(hoho.android.usbserial串口库)
- libvlc android播放RTSP流视频的故事
- 《Android Studio应用开发实战详解》——第1章,第1.3节Android系统架构
- Android 图片着色 Tint 详解
- Android学习笔记进阶19之给图片加边框
- android中图片倒影、圆角效果重绘
- Android bitmap图片处理
- Android 使用ViewPager实现左右循环滑动图片
- Android -- 自定义Dialog
- [译]Android view 测量布局和绘制的流程
- Android Studio报错:Could not find method android() for arguments
- Android简单自定义View——获取图片颜色的ImageView
- 从Android中Activity之间的通信说开来[转]
- Android studio图片ERROR: 9-patch image xx .9.png malformed
- Android---61---TabHost简单使用
- android网络开源框架volley(五岁以下儿童)——volley一些细节
- Android程序猿必掌握的sqlite数据库连表查询
- android中Canvas使用drawBitmap绘制图片
- Android 与 JS 交互数据上限(Base64图片传输问题)