Android知识Android开发Android技术知识

【Android Drawable】四、TransitionDr

2017-04-29  本文已影响140人  秀花123

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>

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>

上面的属性规定了裁剪的方向和位置,裁剪的比例则是通过 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)
上一篇 下一篇

猜你喜欢

热点阅读