本文出自 “阿敏其人” 簡書博客,轉載或引用請注明出處。
ClipDrawable對應的標簽是<clip>,它可以根據自己的當前的level來裁剪一個Drawable。
主要是利用 clipOrientation(垂直/水平) 和 gravity(多種可選的方向),兩者結合使用。
一、語法
<?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"] />
主要關注兩個節點,一個android:clipOrientation只有垂直和水平可選
android:gravity可選的就多啦
選項 | 作用 |
---|---|
top | 將內部的Drawable放在容器的頂部,不改變它的大小,如果為豎直裁剪,那么從底部開始裁剪 |
bottom | 將內部的Drawable放在容器的底部,不改變它的大小,如果為豎直裁剪,那么從頂部開始裁剪 |
left | 將內部的Drawable放在容器的左部,不改變它的大小,如果為水平裁剪,那么從右邊開始裁剪,這就是默認值 |
right | 將內部的Drawable放在容器的右部,不改變它的大小,如果為水平裁剪,那么從左邊開始裁剪 |
center_vertica l 內部的Drawable在垂直方向上填充容器,如果是垂直裁剪,那么僅當ClipDrawable等級為0的時候,才能有裁剪行為 | |
center_horizontal | 使內部的Drawable在容器中水平居中,不改變它的大小,如果為水平裁剪,那么僅當ClipDrawable的等級為0時,才能有裁剪行為 |
center | 是內部的Drawable在容器中水平和豎直方向都居中,不改變大小,如果為處置裁剪,那么從上下同時開始裁剪;如果為水平裁剪,那么左右同時開始裁剪 |
fill | 使內部的Drawable在水平和垂直方向上同時填充容器,僅當ClipDrawable的等級為0時,才能有裁剪行為 |
clip_vertocal | 附加選項,表示垂直方向的裁剪,較少使用 |
clip_horizoltal | 附加選項,表示水平方向的裁剪,較少使用 |
二、demo
clipdrawable_simple.xml
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/star"
android:clipOrientation="horizontal"
android:gravity="bottom">
</clip>
.
.
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@mipmap/star"
android:layout_marginBottom="20dp"/>
<ImageView
android:id="@+id/mIvClip"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/clipdrawable_simple"
/>
</LinearLayout>
.
.
代碼
import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.mIvClip);
//ClipDrawable clipDrawable = (ClipDrawable) imageView.getDrawable(); 這樣寫會報空指針異常
ClipDrawable clipDrawable = (ClipDrawable) imageView.getBackground();
clipDrawable.setLevel(5000);
}
}
.
.
效果展示
效果展示.png
了解更多的Drawable分類 Drawable圖像資源抽象類
本篇完