美文网首页Android知识Android开发Android技术知识
【Android Drawable】四、TransitionDr

【Android Drawable】四、TransitionDr

作者: 秀花123 | 来源:发表于2017-04-29 15:36 被阅读140次

TransitionDrawable

对应于 <transition> 标签,实现两个 Drawable 之间的淡入淡出效果。
它的语法和 LayerDrawable 一样,定义如下:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id=""
        android:drawable=""
        android:gravity=""
        android:top=""
        android:left=""
        android:bottom=""
        android:right=""
        android:width=""
        android:height=""
        android:start=""
        android:end=""/>
    <item />
</transition>

用作 View 的背景或 ImageView 的 Drawable 时,在代码中获取到 TransitionDrawable 对象,然后调用 TransitionDrawable # startTransition 方法开始淡入淡出的进行 Drawable 切换。
TransitionDrawable 类 public 的方法,参数是一个 Drawable 数组:

public TransitionDrawable(Drawable[] layers)

InsetDrawable

对应 <inset> 标签,将其它 Drawable 内嵌到自己当中,并在四周留出一定的间距,当一个 View 希望自己的背景比实际区域小时,可以采用 InsetDrawable 实现。
它的语法结构如下:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable=""
    android:inset=""
    android:insetLeft=""
    android:insetTop=""
    android:insetRight=""
    android:insetBottom=""
    android:visible="">
</inset>

inset 属性是内置 Drawable 相对 InsetDrawable 的偏移量,内置的 Drawable 通过 android:drawable 属性设置,也可以在 <inset> 标签内通过一系列标签定义 Drawable。
InsetDrawable 的构造方法:

public InsetDrawable(@Nullable Drawable drawable, int inset)
public InsetDrawable(@Nullable Drawable drawable, int insetLeft, int insetTop,int insetRight, int insetBottom)

参数就是 Drawable 对象和 inset 值

ScaleDrawable

对应 <scale> 标签,根据 level 将指定的 Drawable 缩放到一定比例。
语法类似于 InsetDrawable :

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable=""
    android:level=""
    android:scaleGravity=""
    android:scaleWidth=""
    android:scaleHeight=""
    >
</scale>
  • Drawable 的引用使用 android:drawable 属性或者在标签内定义 Drawable;
  • android:scaleGravity 表示缩放后 Drawable 的位置,取值有 top、bottom、left、right 分别表示偏左上右下显示,center、center_vertical、center_horizontal 表示居中显示,fill、fill_vertical、fill_horizontal 表示拉伸、clip_vertical、clip_horizontal 表示裁剪
  • android:scaleWidth、android:scaleHeight 属性设置缩放的高度和宽度,取值为百分数,并不是缩放后的宽高占原来宽高的比例,而是宽度高度的取值在原来的基础上缩小的比例。所以该值越大,Drawable 就越小;
  • android:level ScaleDrawable 和内部的 Drawable 的 level 是一样的,当 level 为 0 时,ScaleDrawable 是不可见的,可以通过 android:level 属性设置 level,也可以通过 Drawable#setLevel 方法在代码中设置,level 的取值范围为 0~10000。
    ScaleDrawable 的宽高可以近似看做如下计算:

w -= (int) (w * mScaleState.mScaleWidth * (10000 - level) / 10000)
h -= (int) (h * mScaleState.mScaleHeight * (10000 - level) / 10000)

是根据缩放比例和等级在原来的基础上减去一定的值,并不是简单的倍数关系,很显然,当缩放比例越大,减去的值就越大,Drawable 就越小;level 值越大,减去的值就越小,Drawable 就越大,当 level 为 10000 时,Drawable 保持大小不变,当 level 为 0 时,Drawable 就无法显示出来了,不推荐将 level 取值大于 10000;
public 的构造方法只有一个,分别将 Drawable、gravity、scaleWidth、scaleHeight 作为参数传入:

public ScaleDrawable(Drawable drawable, int gravity, float scaleWidth, float scaleHeight)

ClipDrawable

对应 <clip> 标签,根据当前 level 裁剪另一个 Drawable,
语法如下:

<clip xmlns:android="http://schemas.android.com/apk/res/android"
   android:drawable=""
    android:clipOrientation=""
    android:gravity=""
    >
</clip>
  • android:drawable 图片的引用还是通过 drawable 属性或者在标签内定义 Drawable;
  • android:clipOrientation 有 vertical 和 horizontal 两个方向
  • android:gravity 需要和 clipOrientaion 属性一起作用,选项可以通过 | 来组合使用
  • top Drawable 放在容器顶部,大小不改变,如果为竖直裁剪,从底部开始裁剪;
  • bottom Drawable 放在容器底部,大小不改变,如果为竖直裁剪,从顶部开始裁剪;
  • left Drawable 放在容器左边,大小不改变,如果为水平裁剪,从右边开始裁剪;
  • right Drawable 放在容器右边,大小不改变,如果为水平裁剪,从左边开始裁剪;
  • center Drawable 居中,大小不改变,如果为竖直裁剪,从上下两边开始裁剪,如果为水平裁剪,从作用两边开始裁剪;
  • center_vertical Drawable 竖直居中,大小不改变,如果为竖直裁剪,从上下两边开始裁剪;
  • center_horizontal Drawable 水平居中,大小不改变,如果为水平裁剪,从左右两边开始裁剪;
  • fill Drawable 水平竖直方向填充容器,仅当等级为 0 时,才有裁剪行为;
  • fill_vertical Drawable 竖直方向上填充容器,如果为竖直裁剪,仅当等级为 0 时有效;
  • fill_horizontal Drawable 水平方向上填充容器,如果为水平裁剪,仅当等级为 0 时有效;
  • clip_vertival 附加项,表示竖直裁剪,较少使用
  • clip_horizontal 附加项,表示水平裁剪,较少使用

上面的属性规定了裁剪的方向和位置,裁剪的比例则是通过 level 设置的,在clip 标签中并没有 level 属性,只能在代码中通过 Drawable#setLevel
方法设置,level 取值 0 ~ 10000,0 表示完全裁剪,10000 表示不裁剪啊。
ClipDrawable 类的 public 构造方法只有一个,上面说的属性都是通过构造方法传入:

public ClipDrawable(Drawable drawable, int gravity, int orientation)

RotateDrawable

对应 <rotate> 标签,根据 level 将指定 Drawable 旋转的角度

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable=""
    android:pivotX=""
    android:pivotY=""
    android:fromDegrees=""
    android:toDegrees="">
</rotate>

public 方法

public RotateDrawable()
public void setFromDegrees(float fromDegrees)
public void setToDegrees(float toDegrees)
public void setPivotX(float pivotX)
public void setPivotY(float pivotY)
public void setPivotYRelative(boolean relative)

相关文章

网友评论

    本文标题:【Android Drawable】四、TransitionDr

    本文链接:https://www.haomeiwen.com/subject/icdzzttx.html