PS:本文系转载文章,阅读原文可读性会更好,文章末尾有原文链接
【Android中的Drawable(三)】目录1、TransitionDrawable2、InsetDrawable3、ScaleDrawable1、TransitionDrawable我们基于Android中的Drawable(二)这篇文章再继续分析其他常用的 Drawable;TransitionDrawable 在 xml 文件中对应的标签是 transition,它实现的是2个 Drawable 之间的淡入淡出效果,为了更好的理解它,我们也先写一个 demo;(1)在 drawable 文件夹下新建一个 my_transition.xml 文件;
文章图片
img_4 的图片如下所示;
文章图片
(2)Activity 的布局文件 activity_transition.xml 如下所示;
文章图片
当我们点击 “按钮” 后,3s 后就变成了如下的效果图;
文章图片
在 my_transition.xml 文件中,transition 标签下的 item 标签其实就是一种 Drawable;一般我们用 TransitionDrawable 作为 ImageView 的前景图,或者用作 View 的背景图,我们可通过 TransitionDrawable 的 startTransition 和 reverseTransition 方法来实现淡入淡出的效果以及它的逆过程。2、InsetDrawableInsetDrawable 在 xml 布局文件中对应的标签是 inset;如果要实现一个 View 的背景比 View 本身还要小,可以使用 InsetDrawable 来实现,类似与 Drawable 的 padding 属性;InsetDrawable 还可以实现将其他 Drawable 内嵌到自己当中,并可以在四周留出一定的间距;好,为了更好的理解,我们也写一个 demo ;(1)在 drawable 文件夹下新建一个 my_inset_drawable.xml 文件;
文章图片
首先看一下,我们的 ImageView 的区域是红色背景的这一块对不对?ImageView 的前景就是我们看到的图片对不对?很明显,图片距离 ImageView 顶部 30 dp,图片距离 ImageView 底部 30 dp;好,我们对开发中常见的 inset 标签的属性进行说明一下;android:insetBottom:View 的背景或者前景在 View 实际区域的底部内边距。android:insetTop:View 的背景或者前景在 View 实际区域的顶部内边距。android:insetRight:View 的背景或者前景在 View 实际区域的右边内边距。android:insetLeft:View 的背景或者前景在 View 实际区域的左边内边距。3、ScaleDrawable ScaleDrawable 在 xml 文件中对应于 scale 标签,它可以根据自己的等级将指定的 Drawable 缩放到一定比例,为了更好的理解,我们也先写一个 demo 出来;(1)在 drawable 文件夹下新建一个 scale_drawable.xml 文件;(2)Activity 的布局文件 activity_scale_drawable.xml 如下所示;
文章图片
好,我们现在将 ScaleDrawableActivity 中的 scaleDrawable.setLevel(1) 这行代码改为 scaleDrawable.setLevel(1000),然后再运行一下app,效果图如下所示;
文章图片
看到没有,图片明显变大了,看 ScaleDrawable 中的 setLevel 方法中的参数,参数的取值范围是1-10000,在取值范围内,参数越大,内部的 Drawable 就看起来越大;ScaleDrawable 的默认等级为 0,那么 ScaleDrawable 将无法显示出来。我们可以将 Drawable 的等级设置为大于10000 的值,比如10050,虽然也能正常工作,但是不推荐这么做,有可能会出现其他的问题。刚刚说了,如果 ScaleDrawable 的为0,那么 ScaleDrawable 就无法显示出来,这是不是真的呢?我们看一下 ScaleDrawable 的 draw(Canvas canvas)方法;
文章图片
看到了没,当等级不为0的时候才调用 Drawable 的 draw 方法;好,我们再看看 scale 标签的属性;android:scaleGravity:等同于 shape 的 android:gravity 属性。android:scaleHeight:表示 Drawable 的高的缩放比例,值越大,内部 Drawable 的高度显示得越小,例如 android:scaleHeight=70%”,那么显示时 Drawable 的高度只有原来的30%。android:scaleWidth:表示 Drawable 的宽的缩放比例,值越大,内部 Drawable 的宽显示得越小,例如 android:scaleWidth=70%”,那么显示时 Drawable 的宽度只有原来的30%。
推荐阅读
- Android中的Drawable(二)
- Android中的Drawable(一)
- NDK 系列(6)(说一下注册 JNI 函数的方式和时机)
- Android中View的工作流程之measure过程
- Java并发编程-Java内存模型(JMM)
- Androidjava.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread '