Android开发笔记(九十五)自定义Drawable

这篇博客探讨了Android开发中的Drawable使用,包括如何创建圆形、椭圆和圆角矩形的Drawable,详细讲解了如何添加水印功能,并深入讨论了实现灰度动画的Drawable技巧。
摘要由CSDN通过智能技术生成

Drawable

Bitmap是Android对图像的定义描述,而Drawable则是对图像的展现描述,在View视图中显示图像都是通过Drawable来实现的。其中有关Bitmap的介绍参见《 Android开发笔记(九十四)图片的基本加工》,有关Drawable的介绍参见《 Android开发笔记(七)初识Drawable》。虽然ImageView提供了setImageBitmap方法,但查看该方法的源码,会发现内部还是调用setImageDrawable方法,同时利用BitmapDrawable完成Bitmap与Drawable的转换。
    public void setImageBitmap(Bitmap bm) {
        // if this is used frequently, may handle bitmaps explicitly
        // to reduce the intermediate drawable object
        setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
    }


一般我们要自定义图像控件,通常基于ImageView来自定义,例如ImageButton。其实对于一些简单的图像处理,我们可以自定义Drawable来实现,比如说裁剪图片、给图片添加文本、给图片添加简单动画等等。


圆形、椭圆、圆角矩形的Drawable

对图片进行简单形状的裁剪,这是很常见的操作,例如手机桌面上的APP图标是圆角正方形样式,例如csdn客户端的用户头像是圆形图片等等。这些简单的裁剪,可直接使用Canvas类的相关方法来实现,比如调用drawCircle方法完成圆形裁剪,调用drawOval方法完成椭圆形裁剪,调用drawRoundRect方法完成圆角矩形裁剪,更多有关Canvas的介绍参见《 Android开发笔记(十三)视图绘制的几个方法》。


因为裁剪图片一般是处理位图,所以我们可基于BitmapDrawable来自定义相关Drawable,这样只需自己实现少数方法(构造函数、draw函数等等)。需要注意的是,由于我们要画的是裁剪后的图片,因此不能直接调用drawBitmap方法,而要把Bitmap对象塞入BitmapShader对象中,然后调用Paint的setShader方法,把图像作为阴影来绘制,从而实现裁剪显示的功能。


下面是自定义圆形、椭圆、圆角矩形的Drawable效果图



下面是圆形裁剪图像(CircleDrawable)的代码例子:
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canva
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值