您的当前位置:首页Drawable自定义用法

Drawable自定义用法

2024-12-11 来源:哗拓教育

1、简述

在我们平时的工作中,几乎都会用到Drawable,比较常用的有:shape、selector等;我们可以将Drawable简单理解为可以绘制在 Canvas 上的对象

2、自定义Drawable

看我们的一个需求

图1

图1中圆角背景图片,接到这个ui的时候,我的第一感觉是自定义View去实现,实际上也就是这么去做的;自定义View也有多种方法:1、继承ImageVIew实现;2、自定义一个ViewGroup,这个View可以支持设置4个角为圆角,通过往这个ViewGroup里添加子View实现圆角。我当时实现使用了第二种方法。

通过自定义Drawable实现圆角图片

图2

通过自定义Drawable实现圆形图片

图3

这几个方法是必须实现:

setAlpha:设置透明度的方法。如果设置了透明度,那么可以传递给画笔Paint

getOpacity:获得不透明度,其值可以根据setAlpha中设置的值进行调整。比如,alpha == 0时设置为PixelFormat.TRANSPARENT;在alpha == 255时设置为PixelFormat.OPAQUE;在其他时候设置为PixelFormat.TRANSLUCENT

PixelFormat.OPAQUE:便是完全不透明,遮盖在他下面的所有内容

PixelFormat.TRANSPARENT:透明,完全不显示任何东西

PixelFormat.TRANSLUCENT:只有绘制的地方才覆盖底下的内容

setColorFilter:设置了一个颜色过滤器,那么在绘制出来之前,被绘制内容的每一个像素都会被颜色过滤器改变

draw:所有的绘制操作都会由它来完成

这几个方法选择实现:

getIntrinsicWidth:获取内部宽度,主要是为了在View使用wrap_content的时候,提供一下尺寸

getIntrinsicHeight:获取内部高度,主要是为了在View使用wrap_content的时候,提供一下尺寸

用法:

val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.test)

tvDrawableImage.setImageDrawable(RoundImageDrawable(bitmap))

3、自定义Drawable State

看我们的一个需求

图4

上面的笔按钮有三种状态,1、没有选中状态;2、选中状态;3、选中状态点击,仍然选中,但是弹出笔迹粗细选择框。之前的用法是使用默认的select状态,如果在select为true时点击,就当成第三中状态。

1)自定义属性

图5

2)自定义View(重写onCreateDrawableState方法,在合适的时候把自定义的状态添加进去)

图6

3)使用

selector文件

图7

布局文件

图8

java代码:

图9
显示全文