Android中的Drawable資源—— ClipDrawable
阿新 • • 發佈:2019-02-10
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);