se if(BOTTOM == type){ clipBottom(canvas,paint,roundPx,width,height); }else if(ALL == type){ clipAll(canvas,paint,roundPx); }else{ // 如果type参数不正确,抛出异常 throw new IllegalArgumentException("Invalid type parameter, should be one of the defined constants in BitmapFillet"); } // 使用PorterDuffXfermode模式,将源图片绘制到画板上,实现圆角效果 canvas.drawBitmap(bitmap, 0, 0, paint); return paintingBoard; } /** * 对图片的顶部进行圆角处理 * @param canvas 画布 * @param paint 画笔 * @param roundPx 圆角的像素大小 * @param width 图片宽度 * @param height 图片高度 */ private static void clipTop(Canvas canvas, Paint paint, int roundPx, int width, int height) { // 创建一个矩形区域 RectF rect = new RectF(0, 0, width, roundPx); // 画出圆形的顶部 canvas.drawRoundRect(rect, roundPx / 2, roundPx / 2, paint); // 使用PorterDuffXfermode剪裁掉非圆形部分的图像 canvas.clipPath(new Path().addRoundRect(rect, roundPx / 2, roundPx / 2, Path.Direction.CW), PorterDuffXfermode.getInstance(Mode.SRC_IN)); // 绘制原图的其余部分 canvas.drawBitmap(Bitmap.createBitmap(width, height - roundPx, Config.ARGB_8888), 0, roundPx, paint); } // 其他clip方法如clipLeft(), clipRight(), clipBottom()与此类似,只是调整矩形的坐标和圆形半径,以适应不同方向的圆角 // ... // 对所有角都进行圆角处理 * @param canvas 画布 * @param paint 画笔 * @param roundPx 圆角的像素大小 */ private static void clipAll(Canvas canvas, Paint paint, int roundPx) { // 创建一个矩形区域,并设定圆角半径 RectF rect = new RectF(0, 0, width, height); // 画出带有四个圆角的矩形 canvas.drawRoundRect(rect, roundPx / 2, roundPx / 2, paint); // 使用PorterDuffXfermode剪裁掉非圆形部分的图像 canvas.clipPath(new Path().addRoundRect(rect, roundPx / 2, roundPx / 2, Path.Direction.CCW), PorterDuffXfermode.getInstance(Mode.SRC_IN)); // 绘制原图 canvas.drawBitmap(bitmap, 0, 0, paint); } } 在Android开发中,处理指定角的圆角图片是一项常见的需求,尤其是在设计用户界面时。上述代码提供了一个名为`BitmapFillet`的类,它包含了一系列静态方法来实现这一功能。这个类的核心思想是利用`Canvas`和`Paint`对象创建一个新的透明`Bitmap`作为画板,然后在画板上画出指定形状的区域(圆角),最后将原始图片覆盖在这个形状上,通过PorterDuffXfermode模式实现圆角效果。 `BitmapFillet`定义了几个常量,如`ALL`, `TOP`, `LEFT`, `RIGHT`, `BOTTOM`,这些常量用于指示要处理的图片的哪些角。例如,`ALL`表示对所有角进行圆角处理,而`TOP`仅处理顶部的两个角。 `fillet()`方法是主要的接口,接收一个整型参数`type`,表示要处理的角,一个`Bitmap`对象代表要处理的图片,以及一个整型参数`roundPx`,表示圆角的像素大小。根据`type`的值,代码会调用相应的`clip`方法来处理特定方向的圆角。`clip`方法的工作原理是先创建一个对应于圆角的矩形,然后用`drawRoundRect()`方法画出圆角,并使用`clipPath()`方法结合PorterDuffXfermode来剪裁掉非圆形部分,最后将原图片的其余部分绘制到画板上。 PorterDuffXfermode是一种像素混合模式,这里的`Mode.SRC_IN`模式意味着只有源图像(即圆角部分)会显示在目标图像(画板)上,其他部分则会被剪裁掉,从而实现圆角效果。 `BitmapFillet`类提供了一种高效且灵活的方式来处理Android应用中的圆角图片,可以根据需求指定任意一个或多个角进行圆角化,适用于手机界面图标或其他需要定制圆角的UI元素。这种技术对于提升应用的视觉效果和用户体验至关重要。
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 此存储库收集了所有有趣的 Python 单行代码 欢迎随意提交你的代码!.zip
- 高考志愿智能推荐-JAVA-基于springBoot高考志愿智能推荐系统设计与实现
- 标准 Python 记录器的 Json 格式化程序.zip
- kernel-5.15-rc7.zip
- 来自我在 Udemy 上的完整 Python 课程的代码库 .zip
- 来自微软的免费 Edx 课程.zip
- c++小游戏猜数字(基础)
- 金铲铲S13双城之战自动拿牌助手
- x64dbg-development-2022-09-07-14-52.zip
- 多彩吉安红色旅游网站-JAVA-基于springBoot多彩吉安红色旅游网站的设计与实现