圆角图形在android的开发中非常常见,也有多种实现方式,今天主要演示两种使用paint相关的API来完成图形圆角裁剪的过程。主要用的知识点为BitmapShader和Xfermode,这两个类前面已经有所介绍(闲聊自定义控件之基础——Paint),大家可以对照理解一下。之所以使用这两种方式,一方面是为了补足上一篇讲述paint的博客中缺乏对高级应用的实战,另一方面也是非常重要的一方面是因为这两种方式特别是第一种方式是目前比较主流且易实现的方式。
简单起见,没有针对图片进行缩放处理,如果有这方面的需求,可以将自己写的自定义View继承自ImageView,通过控件的宽高,图片的大小以及scaleType属性,利用Matrix进行缩放,最后进行圆角的处理。特别需要注意的是,圆角的处理要放到缩放之后处理,不然的话可能出不来效果。
BitmapShader实现图形圆角
/***
*
* @param bitmap 原图片
* @param radius 圆角大小
* @return
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public static Bitmap roundByBitmapShader(Bitmap bitmap, int radius) {
Bitmap roundedCornerBitmap = null;
if (null != bitmap) {
int height = bitmap.getHeight();