日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

你都知道么?Android中21种drawable标签大全

發布時間:2024/4/15 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你都知道么?Android中21种drawable标签大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我們在drawable目錄下可以創建很多自定義的資源,其中用的最多的應該就是selector和shape。目前在Android中有21種drawable標簽,了解和利用這些標簽對我們的開發有很大的幫助。這個文章我們對這21種標簽做一個介紹,讓大家有一個印象。

本文中有些資料取自網上,當時記錄在筆記中,但是由于時間久遠,忘記出處了。

shape

這個大家非常熟悉,簡單列舉一下屬性和子標簽,至于子標簽的屬性和具體使用就不細說了,網上有的是

自身屬性

android:dither 是否啟動圖片抖動

android:shape 形狀。分別為矩形、線、橢圓、環。默認為矩形rectangle

當為line時,一定要有stroke,實線虛線都可以,但是只能是橫線,并且局中,主要用于分割線

android:tint 給shape著色

android:tintMode 著色類型(蒙版類型)

android:visible

//下面這五個屬性是shape為ring,即圓環是才使用的

android:innerRadius

android:innerRadiusRatio

android:thickness

android:thicknessRatio

android:useLevel

子標簽

solid填充顏色

corners圓角

stroke描邊

padding邊距

size長寬

gradient漸變

selector

選擇器,也很常用,設置不同狀態下不同的drawable。

屬性

android:dither 是否啟動圖片抖動

android:visible

android:enterFadeDuration 狀態改變時,新狀態展示時的淡入時間,以毫秒為單位

android:exitFadeDuration 狀態改變時,舊狀態消失時的淡出時間,以毫秒為單位

android:autoMirrored 設置圖片是否需要鏡像反轉,當布局方向是RTL,即從右到左布局時才有用,API Level 19(Android 4.4)才添加的屬性

在某些語言下如阿拉伯語習慣是從右到左,在manifest的application中需要設置android:supportsRtl,另外在組件中還有兩個相關屬性android:layoutDirection和android:textDirection

android:variablePadding (基本不用)選擇true時,drawable的內邊距會根據狀態的變化而變化,設置為true時,你必須為不同的狀態配置layout,但是通常不建議這么做。選擇false時,內邊距保持一致,所有狀態中最大的內邊距。

android:constantSize 當選擇器各個狀態的圖片大小不一時,設置為 true表示以最大的圖片的尺寸顯示,設置為false以默認的圖片的尺寸顯示

子標簽

item 該標簽下可以定義drawable類型的子標簽

rotate

可以對資源進行旋轉

屬性

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:fromDegrees 起始的角度度數

android:toDegrees 結束的角度度數,正數表示順時針,負數表示逆時針

android:pivotX 旋轉中心的X坐標,浮點數或是百分比。浮點數表示相對于drawable的左邊緣距離單位為px,如5; 百分比表示相對于drawable的左邊緣距離按百分比計算,如5%; 另一種百分比表示相對于父容器的左邊緣,如5%p; 一般設置為50%表示在drawable中心

android:pivotY 旋轉中心的Y坐標

android:visible 設置初始的可見性狀態,默認為false

子標簽

當不設定android:drawable時,可以添加任意drawable的子標簽,比如shape(其實也可以將shape單獨放一個xml文件中,然后用android:drawable設定,其實是一樣的,只不過直接通過shape標簽可以減少一個文件),這樣在通過旋轉可以實現某些圖形,如三角形。但是比較麻煩,也不常用,這里就不細說了。

bitmap

屬性

android:src 必填項,指定圖片資源,只能是圖片,不能是xml定義的drawable資源(所以svg不行)

android:gravity 設置圖片的對齊方式,比如在layer-list中,默認是填滿整個視圖則會拉伸,用這個值。多個取值可以用 | 分隔:

android:antialias 設置是否開啟抗鋸齒

android:dither 設置是否抖動,圖片與屏幕的像素配置不同時會用到,比如圖片是ARGB 8888的,而屏幕是RGB565

android:filter 設置是否允許對圖片進行濾波,對圖片進行收縮或者延展使用濾波可以獲得平滑的外觀效果

android:tint 著色

android:tileMode 設置圖片平鋪的方式,其中clamp復制圖片邊緣的顏色來填充容器剩下的空白部分

android:alpha 透明度

android:mipMap 設置是否可以使用mipmap,但API Level最低要求是17,即Android 4.2

android:autoMirrored 設置圖片是否需要鏡像反轉,上面提到了

android:tileModeX 設置水平方向的平鋪方式,這是API Level 21(Android 5.0)才添加的屬性

android:tileModeY 設置垂直方向的平鋪方式,這是API Level 21(Android 5.0)才添加的屬性

android:tintMode 著色模式,也是API Level 21(Android 5.0)才添加的屬性

nine-patch

屬性

android:src 必填項,必須指定點九類型的圖片 xxx.9.png

其他屬性與bitmap完全一樣,不復述了。

color

屬性

只有一個android:color屬性,因為可以直接在color.xml設置顏色,所以這個用處不多。

inset

設置邊距,注意這個邊距不是指內容與view邊界的padding(如shape中的padding),而是drawable與view邊界的距離

比如做背景時,無論怎么設置view的padding,圖案都是完整填充view的,設置了這個之后就可以讓圖案四周留出空白。

屬性

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:visible 設置初始的可見性狀態,默認為false

android:insetLeft 左邊距

android:insetRight 右邊距

android:insetTop 頂部邊距

android:insetBottom 底部邊距

android:inset 設置統一邊距,會覆蓋上面四個屬性,但API Level要求為21,即Android 5.0

子標簽

如果不設置drawable屬性,也可以定義drawable類型的子標簽,如shape等

clip

使用clip標簽可以對drawable進行裁剪,在做進度條時很有用。通過設置level值控制裁剪多少,level取值范圍為0~10000,默認為0,表示完全裁剪,圖片將不可見;10000則完全不裁剪,可見完整圖片。

屬性

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:clipOrientation 設置裁剪的方向

android:gravity 設置裁剪的位置,可取值如下,多個取值用 | 分隔:

  • top: 圖片放于容器頂部,不改變圖片大小。當裁剪方向為vertical時,會裁掉圖片底部

  • bottom: 圖片放于容器底部,不改變圖片大小。當裁剪方向為vertical時,會裁掉圖片頂部

  • left: 圖片放于容器左邊,不改變圖片大小,默認值。當裁剪方向為horizontal,會裁掉圖片右邊部分

  • right: 圖片放于容器右邊,不改變圖片大小。當裁剪方向為horizontal,會裁掉圖片左邊部分

  • center: 圖片放于容器中心位置,包括水平和垂直方向,不改變圖片大小。當裁剪方向為horizontal時,會裁掉圖片左右部分;當裁剪方向為vertical時,會裁掉圖片上下部分

  • fill: 拉伸整張圖片以填滿容器的整個高度和寬度。這時候圖片不會被裁剪,除非level設為了0,此時圖片不可見

  • center_vertical: 圖片放于容器垂直方向的中心位置,不改變圖片大小。裁剪和center時一樣

  • center_horizontal: 圖片放于容器水平方向的中心位置,不改變圖片大小。裁剪和center時一樣

  • fill_vertical: 在垂直方向上拉伸圖片以填滿容器的整個高度。當裁剪方向為vertical時,圖片不會被裁剪,除非level設為了0,此時圖片不可見

  • fill_horizontal: 在水平方向上拉伸圖片以填滿容器的整個寬度。當裁剪方向為horizontal時,圖片不會被裁剪,除非level設為了0,此時圖片不可見

  • clip_vertical: 附加選項,裁剪基于垂直方向的gravity設置,設置top時會裁剪底部,設置bottom時會裁剪頂部,其他情況會同時裁剪頂部和底部

  • clip_horizontal: 附加選項,裁剪基于水平方向的gravity設置,設置left時會裁剪右側,設置right時會裁剪左側,其他情況會同時裁剪左右兩側

子標簽

如果不設置drawable屬性,也可以定義drawable類型的子標簽,如shape等

注意

必須設置level才會生效,而level只能在代碼中設置,ImageView.setImageLevel()。除了用于進度條,配合屬性動畫可以實現圖片各種效果的逐漸展示。

scale

與clip類似,也需要設置level值,0-10000,10000是原大小,但是可以設置超過10000的值,則為放大。

屬性

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:scaleHeight 設置可縮放的高度,用百分比表示,格式為XX%,0%表示不做任何縮放,50%表示只能縮放一半

android:scaleWidth 設置可縮放的寬度,用百分比表示,格式為XX%,0%表示不做任何縮放,50%表示只能縮放一半

android:scaleGravity 設置drawable縮放后的位置,取值和bitmap標簽的一樣,就不一一列舉說明了,不過默認值是left

android:useIntrinsicSizeAsMinimum 設置drawable原有尺寸作為最小尺寸,設為true時,縮放無效

android:level 要求api>=24,但是設置沒有效果,待研究

子標簽

如果不設置drawable屬性,也可以定義drawable類型的子標簽,如shape等

level-list

當需要在一個View中顯示不同圖片的時候,比如手機剩余電量不同時顯示的圖片不同,level-list就可以派上用場了。level-list可以管理一組drawable,每個drawable設置一組level范圍,最終會根據level值選取對應的drawable繪制出來。

子標簽

item

item的屬性有

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:minLevel 該item的最小level值

android:maxLevel 該item的最大level值

通過level-list我們就可以不用在使用if-else來動態改變圖片或者背景了,直接改變level就可以了。

layer-list

這個也比較常用,主要是將幾個drawable疊加在一起,通過簡單的drawable實現復雜的圖形。

屬性

android:autoMirrored 自動鏡像,上面解釋過,api>=19

android:opacity 透明模式,根據官方注釋理解設置了這個時候,子標簽對應的這個屬性都失效,沒測試過

android:paddingMode 堆疊模式,api>=21。有兩種模式

  • nest是默認的,將每一層都嵌套到上一層中,所以上一層的padding對這一層有效果
  • stack將每一層直接堆疊在上一層上,上一個的padding對本層無效果

簡單解釋一下,假設第一層是shape,設置了android:left=“10dp”。在nest模式下第二層是從左邊10dp才開始填充,而在stack模式下第二層是從左邊0dp開始填充。

android:paddingXXX 設置內容邊距(如設置為背景時)

子標簽

item 該標簽下可以定義drawable類型的子標簽

transition

transition其實是繼承自layer-list的transition只能管理兩層drawable(多余的item無效),提供了兩層drawable之間切換的方法,切換時還會有淡入淡出的動畫效果。

屬性

都是繼承layer-list,且都無效

子標簽

item 該標簽下可以定義drawable類型的子標簽

注意

在代碼中,transition標簽生成的Drawable對應的類為TransitionDrawable,要切換時,需要主動調用TransitionDrawable的startTransition()方法,參數為動畫的毫秒數,也可以調用reverseTransition()方法逆向切換。

((TransitionDrawable)drawable).startTransition(500);//正向切換,即從第一個drawable切換到第二個

((TransitionDrawable)drawable).reverseTransition(500);//逆向切換,即從第二個drawable切換回第一個

animation-list

通過animation-list可以將一系列drawable構建成幀動畫,就是將一個個drawable,一幀一幀的播放。

屬性

android:visible

android:oneshot 是否循環播放

android:variablePadding 上面提到過

子標簽

item 該標簽下可以定義drawable類型的子標簽。item的屬性有drawable和duration

animation-rotate

這個很好理解,就是讓一個drawable以某處為中心不停地做旋轉動畫,沒旋轉角度和時間,比如加載動畫。

屬性

android:drawable 指定drawable資源,如果不設置該屬性,也可以定義drawable類型的子標簽

android:pivotX 旋轉中心的X坐標

android:pivotY 旋轉中心的Y坐標

android:visible 設置初始的可見性狀態,默認為false

子標簽

如果不設置drawable屬性,也可以定義drawable類型的子標簽,如shape等

以下是android5.0新增標簽

vector

svg矢量圖

屬性

android:name 名稱

android:width Drawable寬度

android:height Drawable的高度

android:viewportWidth 定義矢量圖形的視圖(viewport)空間的寬度,viewport是一個虛擬的canvas,這不是drawable的寬度,是指這個坐標系橫向最大的數值,即將drawable橫向分成多少份。

android:viewportHeight 定義矢量圖形的可視區域的高度。

android:tint 著色

android:tintMode 著色模式

android:autoMirrored 自動鏡像,上面提到過

android:alpha 透明度,取值0~1

子標簽:

group: 可以包含子group和path。它的屬性:

  • android:name
  • android:rotation 旋轉
  • android:pivotX 旋轉和縮放時的中心點的X軸坐標。取值基于viewport視圖的坐標系,不能使用百分比。
  • android:pivotY 旋轉和縮放時的中心點的Y軸坐標。取值基于viewport視圖的坐標系,不能使用百分比。
  • android:scaleX 在X軸上的縮放比例,最先應用到圖形上。
  • android:scaleY 在Y軸上的縮放比例,最先應用到圖形上。
  • android:translateX 在X軸的平移距離,取值基于viewport視圖的坐標系。最后應用到圖形上。
  • android:translateY 在Y軸的平移距離,取值基于viewport視圖的坐標系。最后應用到圖形上。
    path:路徑,它的屬性:
  • android:name
  • android:pathData 路徑的數據。主要屬性,數據格式比較復雜,不在這細說了。
  • android:fillColor 填充路徑的顏色,在SDK24及以上,可以指定一個顏色狀態列表或者一個漸變的顏色。如果在此屬性上做漸變動畫,新的屬性值會覆蓋此值。
  • android:strokeColor 指定路徑線條的顏色,在SDK24及以上,可以指定一個顏色狀態列表或者一個漸變的顏色。如果在此屬性上做漸變動畫,新的屬性值會覆蓋此值。
  • android:strokeWidth 指定路徑線條的寬度,基于viewport視圖的坐標系
  • android:strokeAlpha 指定路徑線條的透明度
  • android:fillAlpha 指定填充區域的透明度
  • android:trimPathStart 取值從0到1,表示路徑從哪里開始繪制。0~trimPathStart區間的路徑不會被繪制出來。
  • android:trimPathEnd 取值從0到1,表示路徑繪制到哪里。trimPathEnd~1區間的路徑不會被繪制出來。
  • android:trimPathOffset 平移可繪制區域,取值從0到1,線條從trimPathOffset+trimPathStart繪制到trimPathOffset+trimPathEnd,注意:trimPathOffset+trimPathEnd如果超過1,其實也是繪制的的,繪制的是0~trimPathOffset+trimPathEnd-1的位置。
  • android:strokeLineCap 設置線條首尾的外觀,三個值:butt(默認,向線條的每個末端添加平直的邊緣), round(向線條的每個末端添加圓形線帽), square(向線條的每個末端添加正方形線帽。)。
  • android:strokeLineJoin 設置當兩條線條交匯時,創建什么樣的邊角(線段連接類型):三個值:miter(默認,創建尖角),round(創建圓角),bevel(創建斜角) 。
  • android:strokeMiterLimit 設置設置最大斜接長度,斜接長度指的是在兩條線交匯處內角和外角之間的距離。只有當 lineJoin 屬性為 “miter” 時,miterLimit 才有效。
  • android:fillType 設置路徑的填充類型
    clip-path: 只有在剪切路徑內的才會顯示出來,它的屬性:
  • android:name
  • android:pathData 裁切路徑,取值與上面講的pathData相同。

animated-vector

svg矢量動畫,需要配合動畫xml(anim、animator)使用。

屬性

android:drawable svg矢量圖,即VectorDrawable

子標簽:

target: 它的屬性

  • android:name vector中group或path的name
  • android:animation group或path執行的動畫,anim或animator
說明

舉個列子簡單來說一下,假設我們想讓菜單icon(三條橫線)變成后退icon(箭頭)

首先我們要定義一個VectorDrawable,其中包含多條path或group,例子中是三個path,即三條橫線。

然后需要定義幾個anim或animator,例子中需要定義兩個動畫,分別是逆時針和順時針旋轉的動畫

最好定義animated-vector,這樣執行時可以看到上下兩條橫線旋轉與中間橫線交接,由菜單icon轉成了后退icon。

這里注意,當我們使用animator直接改變pathData的時候,比如:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="500"android:propertyName="pathData"android:valueFrom="M20,20L80,20"android:valueTo="M50,20L80,50"android:valueType="pathType" />

一定要將valueType顯式設置為pathType,否則會crash,且沒有crash日志。

另外經測試,在valueFrom和valueTo中的path格式要一一對應,否則也會crash,也沒有日志,我的理解是因為無法計算出動畫數據。

比如:

android:valueFrom="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z" android:valueTo="M4,0h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L0,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"

這樣就沒問題,因為path的每小段的數據都是完全對應,只是每個小部分中的數值有變化

而:

android:valueFrom="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z" android:valueTo="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM9,17L7,17v-7h2v7zM13,17h-2L11,7h2v10zM17,17h-2v-4h2v4z"

則會crash,因為path的數據完全對應不上,無法計算出動畫的中間數據

ripple

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的你都知道么?Android中21种drawable标签大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。