1. 程式人生 > >Android中的Drawable資源—— ClipDrawable

Android中的Drawable資源—— ClipDrawable

ClipDrawable是通過設定一個Drawable的當前顯示比例來裁剪出另一張Drawable,你可以通過調節這個比例來控制裁剪的寬高,以及裁剪內容佔整個容器的權重,通過ClipDrawable的setLevel()方法調節顯示比例可以實現類似Progress進度條的效果。ClipDrawable的level值範圍在[0,10000],level的值越大裁剪的內容越少,如果level為10000時則完全顯示。

存放位置:res/drawable/

使用方式:
在Java檔案中:R.drawable.filename

在xml佈局檔案中:@[package:]drawable/filename

語法:

<?xml version="1.0"
encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/drawable_resource" android:clipOrientation=["horizontal" | "vertical"] android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | "fill_vertical"
| "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] />

1、android:drawable Drawable資源。 必須。表示該ClipDrawable引用的drawable資源。

2、android:clipOrientation 裁剪的方向。 horizontal:水平方向 vertical:垂直方向

3、android:gravity 指定從哪個地方裁剪。必須是下面一個或多個值(多個值之間用”|”分隔)

  • top 將這個物件放在容器的頂部,不改變其大小,當clipOrientation 是”vertical”,從底部(bottom)開始裁剪
  • bottom 將這個物件放在容器的底部,不改變其大小。當clipOrientation 是 “vertical”,從頂部(top)開始裁剪
  • left 將這個物件放在容器的左部,不改變其大小。當clipOrientation 是 “horizontal”,從右邊(right)開始裁剪。這也是預設情況。left 將這個物件放在容器的左部,不改變其大小。當clipOrientation 是 “horizontal”,從右邊(right)開始裁剪。這也是預設情況。
  • right 將這個物件放在容器的右部,不改變其大小。當clipOrientation 是 “horizontal”,從左邊(left)開始裁剪。
  • center_vertical 將物件放在垂直中間,不改變其大小。裁剪的情況和”center“一樣。
  • fill_vertical 垂直方向上不發生裁剪。(除非drawable的level是 0,才會不可見,表示全部裁剪完)
  • center_horizontal 將物件放在水平中間,不改變其大小。裁剪的情況和”center“一樣。
  • fill_horizontal 水平方向上不發生裁剪。(除非drawable的level是 0,才會不可見,表示全部裁剪完)
  • center 將這個物件放在水平垂直座標的中間,不改變其大小。當clipOrientation 是 “horizontal”裁剪髮生在左右。當clipOrientation是”vertical”,裁剪髮生在上下。
  • fill 填充整個容器,不會發生裁剪。(除非drawable的level是 0,才會不可見,表示全部裁剪完)。
  • clip_vertical 額外的選項,它能夠把它的容器的上下邊界,設定為子物件的上下邊緣的裁剪邊界。裁剪要基於物件垂直重力設定:如果重力設定為top,則裁剪下邊,如果設定為bottom,則裁剪上邊,否則則上下兩邊都要裁剪。
  • clip_horizontal 額外的選項,它能夠把它的容器的左右邊界,設定為子物件的左右邊緣的裁剪邊界。裁剪要基於物件垂直重力設定:如果重力設定為right,則裁剪左邊,如果設定為left,則裁剪右邊,否則則左右兩邊都要裁剪。

android:gravity需要和android:clipOrientation配合使用,不同的組合,裁剪的效果也不同。

例如:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />
<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />
ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 1000);

這裡寫圖片描述