Clip Drawable
一個定義在XML中的Drawable對象,根據當前的level值來得到一個Drawable的截取片段。你可以通過level值來控制控制得到的Drawable的寬和高,也可以指定Drawable在容器中的gravity屬性。該類Drawable通常用於進度條的實現。
文件路徑:res/drawable/filename.xml 文件名就是對應的資源ID
編譯過的資源類型: ClipDrawable
資源引用:
- 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"] />
元素:
< clip > 定義了Clip Drawable,必須作爲根節點存在。
屬性:
- xmlns:android
String類型. 定義了 XML 的命名空間,必須爲”http://schemas.android.com/apk/res/android“。
android:drawable
Drawable資源,必須,指向一個待裁剪的drawable。android:clipOrientation
關鍵屬性,指定了Drawable的裁剪方向。
必須爲下面的值之一:
值 | 屬性 |
---|---|
horizontal | 橫向裁剪Drawable |
vertical | 縱向裁剪Drawable |
- android:gravity
關鍵屬性,指定了從哪裏開始裁剪Drawable。
必須爲下面的一個或者多個(使用|分隔)屬性:
值 | 屬性 |
---|---|
top | 把對象置於容器頂部,不改變其大小。當clipOrientation值爲”vertical”時,從底部開始裁剪 |
bottom | 把對象置於容器底部,不改變其大小。當clipOrientation值爲”vertical”時,從頂部開始裁剪 |
left | 把對象置於容器左側,不改變其大小。當clipOrientation值爲”horizontal”時,從右側開始裁剪,默認值。 |
right | 把對象置於容器左側,不改變其大小。當clipOrientation值爲”horizontal”時,從左側開始裁剪。 |
center_vertical | 把對象置於容器垂直居中方向,不改變其大小。裁剪方式同 “center” 的相同 |
fill_vertical | 如果有需要的話,充滿容器的垂直方向,當clipOrientation值爲”vertical”時,不會有裁剪髮生,因爲Drawable已經充滿了垂直方向(除非level值爲0,此時爲不可見狀態。) |
center_horizontal | 把對象置於容器水平居中方向,不改變其大小。裁剪方式同 “center” 的相同 |
fill_horizontal | 如果有需要的話,充滿容器的水平方向,當clipOrientation值爲”horizontal”時,不會有裁剪髮生,因爲Drawable已經充滿了水平方向(除非level值爲0,此時爲不可見狀態。) |
center | 把對象置於容器的居中位置,不改變其大小,當clipOrientation值爲”horizontal”時,從左至右裁剪,當clipOrientation值爲”vertical”時,從上至下裁剪。 |
fill | 如果有需要的話,充滿整個容器。不會有裁剪髮生,因爲Drawable已經充滿了整個容器(除非level值爲0,此時爲不可見狀態。) |
clip_vertical | 附加選項,裁剪子元素的上邊界和/或下邊界到容器的邊界。此時裁剪基於vertical gravity:頂部的gravity裁剪底部邊界,底部的gravity裁剪頂部邊界,兩者都不存在的兩側同時裁剪。 |
clip_horizontal | 附加選項,裁剪子元素的左邊界和/或右邊界到容器的邊界。此時裁剪基於horizontal gravity:左側的gravity裁剪右邊界,右側的gravity裁剪左邊界,兩者都不存在的兩側同時裁剪。 |
示例:
該文件保存在res/drawable/clip.xml:
<?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" />
下面展示如何把定義的drawable用於一個View
<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);
增加level的值會增加裁剪量而使得圖片慢慢展示出來,下面是7000時的樣子:
說明:默認level是0,這是完全裁剪,圖像是不可見的。當level爲10000時,圖像不會被裁剪,完全可見。
也可以參考:
Scale Drawable
一個定義在XML中的Drawable對象,根據當前的level值來得到一個改變大小的Drawable。
文件路徑:res/drawable/filename.xml 文件名就是對應的資源ID
編譯過的資源類型: ScaleDrawable
資源引用:
- JAVA中: R.drawable.filename
- XML中: @[package:]drawable/filename
語法
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:scaleHeight="percentage"
android:scaleWidth="percentage" />
元素:
< scale > 定義了Scale Drawable,必須作爲根節點存在。
屬性:
- xmlns:android
String類型. 定義了 XML 的命名空間,必須爲”http://schemas.android.com/apk/res/android“。
android:drawable
Drawable資源,必須,指向一個待裁剪的drawable。android:scaleGravity
關鍵屬性,指定了Drawable的縮放之後的位置。
必須爲下面的一個或者多個(使用|分隔)屬性:
值 | 屬性 |
---|---|
top | 把對象置於容器頂部,不改變其大小。 |
bottom | 把對象置於容器底部,不改變其大小。 |
left | 把對象置於容器左側,不改變其大小。默認值。 |
right | 把對象置於容器左側,不改變其大小。 |
center_vertical | 把對象置於容器垂直居中方向,不改變其大小 |
fill_vertical | 如果有需要的話,充滿容器的垂直方向。 |
center_horizontal | 把對象置於容器水平居中方向,不改變其大小。 |
fill_horizontal | 如果有需要的話,充滿容器的水平方向。 |
center | 把對象置於容器的居中位置,不改變其大小。 |
fill | 如果有需要的話,充滿整個容器。 |
clip_vertical | 附加選項,裁剪子元素的上邊界和/或下邊界到容器的邊界。此時裁剪基於vertical gravity:頂部的gravity裁剪底部邊界,底部的gravity裁剪頂部邊界,兩者都不存在的兩側同時裁剪。 |
clip_horizontal | 附加選項,裁剪子元素的左邊界和/或右邊界到容器的邊界。此時裁剪基於horizontal gravity:左側的gravity裁剪右邊界,右側的gravity裁剪左邊界,兩者都不存在的兩側同時裁剪。 |
android:scaleHeight
百分比。高度縮放比,值的格式爲XX%。例如:100%,12.5%,等。android:scaleWidth
百分比。寬度縮放比,值的格式爲XX%。例如:100%,12.5%,等。
示例:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/logo"
android:scaleGravity="center_vertical|center_horizontal"
android:scaleHeight="80%"
android:scaleWidth="80%" />
也可以參考:
Shape Drawable
一個定義在XML中的通用形狀。
文件路徑:res/drawable/filename.xml 文件名就是對應的資源ID
編譯過的資源類型: GradientDrawable
資源引用:
- JAVA中: R.drawable.filename
- XML中: @[package:]drawable/filename
語法
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/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="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
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 > 定義了Shape Drawable,必須作爲根節點存在。
屬性:
xmlns:android
String類型. 定義了 XML 的命名空間,必須爲”http://schemas.android.com/apk/res/android“。android:shape
關鍵屬性。定義了形狀的類型,可以使用的屬性有:
值 | 屬性 |
---|---|
rectangle | 充滿View的矩形。這是默認的形狀。 |
oval | 同View尺寸相適應的橢圓。 |
line | 同容器水平方向相同的線,需要通過< stroke >元素來指定線的寬度 |
ring | 圓形。 |
下面的屬性只用於 android:shape=”ring”時:
android:innerRadius
Dimension類型。 內圓的半徑大小。android:innerRadiusRatio
Float類型。 內圓半徑大小比。例如, 如果android:innerRadiusRatio=”5”, 那麼內圓半徑等於外圓的寬度除以5。該屬性被android:innerRadius重寫。 默認值是9。android:thickness
Dimension類型. 圓的線寬。android:thicknessRatio
Float類型。 圓的線寬比。例如,如果android:thicknessRatio=”2”, 那麼線寬等於外圓的寬度除以2. 該屬性被android:innerRadius重寫。默認值是3。android:useLevel
Boolean類型。 “true”表示作爲一個LevelListDrawable來使用。該值通常爲flase,否則你的形狀可能無法顯示。
< corners >
添加圓角邊,只適用於長方形。
屬性:
android:radius
Dimension類型。所有方向的邊角的半徑,重寫了以下4個角的屬性。android:topLeftRadius
Dimension類型。左上方角的半徑。android:topRightRadius
Dimension類型。右上方角的半徑。android:bottomLeftRadius
Dimension類型。左下方角的半徑。android:bottomRightRadius
Dimension類型。右下方角的半徑。
備註:每個角的半徑(最初)應大於1,或者不指定該屬性。如果你想指定不規則的圓角形狀,一個解決方法是指定一個默認角的半徑大於1,然後爲每一個你想指定的角指定半徑,對於不想要圓角的邊,指定爲0(0dp)。
< gradient >
對形狀指定一個色值梯度。
屬性:
android:angle
Integer類型。色彩漸變的角度,0表示從左至右, 90表示從下至上。必須爲45的倍數。默認值爲0。android:centerX
Float類型。相對中點的漸變點x座標(0 - 1.0)。android:centerY
Float類型。相對中點的漸變點y座標(0 - 1.0)。android:centerColor
Color類型。開始和結束之間的可選顏色,一個十六進制的值或顏色的資源。android:endColor
Color類型。結束顏色,一個十六進制的值或顏色的資源。android:gradientRadius
Float類型.。顏色梯度的半徑,只適用於android:type=”radial”。android:startColor
Color類型。開始顏色,一個十六進制的值或顏色的資源。android:type
關鍵屬性。 梯度模式應用的類型。有效值爲:
值 | 屬性 |
---|---|
linear | 線性梯度。默認值。 |
radial | 徑向梯度。開始顏色爲中心顏色。 |
sweep | 掃線梯度。 |
- android:useLevel
Boolean類型。”true”表示作爲一個LevelListDrawable來使用。
< padding >
屬性:
指定容器內的padding值(在容器內的padding值,而非Shape Drawable本身的)。
android:left
Dimension類型。 左padding,dimension值或者dimension資源。android:top
Dimension類型。 上padding,dimension值或者dimension資源。android:right
Dimension類型。 右padding,dimension值或者dimension資源。android:bottom
Dimension類型。 下padding,dimension值或者dimension資源。
< size >
形狀的大小。
屬性:
android:height
Dimension類型。 形狀的高度,dimension值或者dimension資源。android:width
Dimension類型。 形狀的寬度,dimension值或者dimension資源。
說明:默認情況下,會按照定義的數值來縮放自身以同容器大小相適配。當你在ImageView中使用shape時,可以通過指定android:scaleType爲”center”來限制縮放。
< solid >
形狀的填充色
屬性:
- android:color
Color類型。用於形狀的填充顏色,一個十六進制的值或顏色的資源。
< stroke >
形狀的邊緣線
屬性:
- android:width
Dimension類型。線的寬度,dimension值或者dimension資源。 android:color
Color類型。線的顏色,一個十六進制的值或顏色的資源。android:dashGap
Dimension類型。虛線之間的距離,只有當設置了android:dashWidth時有效,dimension值或者dimension資源。android:dashWidth
Dimension類型。虛線的長度,只有當設置了android:dashGap時有效,dimension值或者dimension資源。
示例:
該文件保存在res/drawable/gradient_box.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FFFF0000"
android:endColor="#80FF00FF"
android:angle="45"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>
下面展示如何把定義的drawable用於一個View
<TextView
android:background="@drawable/gradient_box"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
下面的系統代碼得到了一個shape drawable並將其用於一個view
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);
TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
也可以參考: