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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024年成本之外的角逐:各国制造业和供应链就绪度白皮书(英文版).pdf
- 2024年AI辅助编码:利用生成式AI增强软件开发研究报告(英文版).pdf
- 2024年生成式AI对生产力的提升作用研究报告:解锁竞争优势(英文版).pdf
- 2024年日本科技人才状况报告(英).pdf
- 2024年人工智能和数据集物料清单综合创建指南报告-使用 SPDX 3.0实施AI物料清单(AI BOM)(英文版).pdf
- 2024资金森林循环体系x概念白皮书.pdf
- 2024年智能炼金术:生成式人工智能如何彻底变革现代企业中的商业智能和分析白皮书(英文版).pdf
- 2024年第三季度全球风险投资报告.pdf
- 2024零碳园区创建指南.pdf
- 文化赋能,多元融合 东城范式引领消费升级-2024年北京市东城区消费零售观察报告.pdf
- 元器件选型规范-电阻选型
- LinkedIn领英:2024年领英赋能中国企业全球化报告.pdf
- 2024年安全有效性验证能力白皮书.pdf
- 2024年低空经济产业发展白皮书.pdf
- 骨髓瘤展望:2024年革新疗法或推动2030年全球骨髓瘤药物市场规模增至330亿美元.pdf
- 魔镜洞察:2024年海外市场白皮书.pdf