6.Android的Drawable

Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,它的种类有很多,最常见的颜色和图片都可以是一个Drawable。在Android的设计中,Drawable是一个抽象类,它是所有Drawable对象的基类,每个具体的Drawable都是它的子类。

Drawable的内部宽/高这个参数比较重要,通过getIntrinsicWidth/getIntrinsicHeight这两个方法可以获取到它们。但是并不是所有的Drawable都有内部宽/高。另外需要注意的是,Drawable的内部宽/高不等同于它的大小,一般来说,Drawable是没有大小概念的,当用作View的背景时,Drawable会被拉伸至View的同等大小。

shape drawable是一种很常见的Drawable,可以理解为通过颜色来构造的图形,它既可以是纯色的图形,也可以是具有渐变效果的图形。

<shape
       xmlns:android="...."
       android:shape=["rectangle" | "oval" | "line" | "ring"]>
    <corners
           android:radius="integer"
           android:topLeftRadius="integer"
           android:topRightRadius="integer"
           android:bottomLeftRadius="integer"
           android:bottomRightRadius="integer" />
  <gradient
           android:angle="integer"
           android:centerX="integer"
           android:centerY="integer"
           android:centerColor="color"
           android:startColor="color"
           android:endColor="color"
           android:gradientRadius="integer"
           android:type=["linear" | "radial" | "sweep"]
           android:useLevel=["true" | "false"] />
  <padding
           android:left="integer"
           android:top="integer"
           android:right="integer"
           android:bottom="integer" />
  <size
        android:width="integer"
        android:height="integer" />
  <solid
         android:color="color" />
  <stroke
          android:width="integer"
          android:color="color"
          android:dashWidth="integer"
          android:dashGap="integer" />

</shape>

<shape>标签创建的drawable,其实体类是GradientDrawable。

<gradient>标签和<solid>标签是互相排斥的,solid表示纯色填充,gradient表示渐变效果。

  • android:angel 渐变的角度,默认为0,其值必须为45的倍数,0表示从左到右,90表示从下到上。

StateListDrawable对应于<selector>标签,它也是表示Drawable集合,每个Drawable都对应着View的一种状态,这样系统就会根据View的状态来选择合适的Drawable。

LevelListDrawable对应于<level-list>标签,它同样表示一个Drawable集合,集合中的每个Drawable都有一个等级level的概念。根据不同的等级,LevelListDrawable会切换为对应的Drawable。

<level-list
      xmlns:android="..."
      <item
                    android:drawable="@drawable/drawable_resource"
                    android:maxLevel="integer"
                    android:minLevel="integer" />
</level-list>

在最小值和最大值之间的等级会对应此item中的Drawable。Drawable的等级是有范围的,即0~10000,最小等级是0,这也是默认值,最大等级是10000。

TransitionDrawable对应于<transition>标签,它用于实现两个Drawable之间的淡入淡出效果。将TransitionDrawable设置为View的背景,然后,通过它的startTransition和reverseTransition方法来实现淡入淡出的效果以及它的逆过程。

InsetDrawable对应于<inset>标签,它可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距。当一个View希望自己的背景比自己的实际区域小的时候,可以采用InsetDrawable来实现,同时,通过LayerDrawable也可以实现这种效果。

ScaleDrawable对应于<scale>标签,它可以根据自己的等级level将指定的Drawable缩放到一定比例。

ClipDrawable对应于<clip>标签,他可以根据自己当前的等级level来裁剪另一个Drawable,裁剪方向可以通过android:clipOrientationandroid:gravity这两个属性来共同控制。

Drawable的实际区域大小可以通过它的getBounds方法来得到,一般来说它和View的尺寸相同。

results matching ""

    No results matching ""