Android中的资源复用小技巧
前言
做了很多項目,發現每個項目里都有大量的相似圖標,比如每個顏色一種、每個角度一種(左箭頭、右箭頭)等等,雖然這些圖標很小占用不了太多資源。但是當我們需要change的時候就得一個個去替換,其實在android里有很多小技巧可以讓這些資源進行復用,減少體積的同時也可以使項目結構更加清晰。
這里總結的一些比較常用的復用,包擴:自適應、變色、旋轉、陰影、組合、透明度、剪裁、留白等
svg矢量圖
android5.0之后android就開始支持svg矢量圖了,是drawable的vector標簽。
使用矢量圖的好處是不用在為不同的分辨率提供不同的切圖了,而且能保證顯示清晰度。
在android studio中,右擊drawable目錄,選擇new - Vector Asset,可以創建一個系統自帶svg矢量圖,或者通過svg、psd文件導入。
下面是一個示例額:
<vector android:height="24dp" android:tint="#FFFFFF"android:viewportHeight="24" android:viewportWidth="24"android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"><path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48V20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48V3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM15,19l-6,-2.11V5l6,2.11V19z"/> </vector>包括圖片的寬高和顏色,最重要的就是path,這里面就是svg圖片繪制的路徑,如果懂相關語法的甚至可以自己手寫一個出來。
變色
變色就是著色,在android5.0版本google出了著色器tint,可以非常方便的對圖片進行著色。
(android5.0還對應的加入了取色器Palette,可以動態的在bitmap上取色并設置給其他組件,達到頁面隨著圖片變色的效果)
比如
<ImageView...android:src="@mipmap/ic_launcher"android:tint="#FFF" />這樣可以將圖片變成白色的。
但是有時候我們需要在其他xml resource中使用,比如style中使用drawable,比如想使用一個黑色的箭頭,但是我們只有白色的箭頭,這時候就沒有tint這個屬性了,那么怎么辦?
我們可以使用bitmap標簽,在drawable下新建一個資源xml,如下:
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android"android:src="@drawable/white_arrow"android:tint="#000000"></bitmap>\然后使用這個drawable即可,但是注意這里無法使用svg矢量圖,即VectorDrawable。
旋轉
比如有一個左箭頭,我們還需要右箭頭。
一個方法是在view中設置android:rotation屬性
<ImageView...android:src="@mipmap/ic_launcher"android:rotation="90" />同樣我們需要在其他xml resource中使用,可以使用rotate標簽,在drawable下新建一個資源xml,如下:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:fromDegrees="90"android:toDegrees="90"android:drawable="@drawable/fit"> </rotate>這里可以使用svg矢量圖
陰影
有時候我們有一張圖片,但在不同場景使用的時候可能需要陰影,也可能不需要,甚至陰影的大小可能也不一樣。
在android5.0以上我們可以直接為view設置elevation即可,如:
<ImageView...android:elevation="3dp"android:src="@drawable/fit"/>這是google新增的層的概念,即z軸,設置elevation可以提升組件的高度,就會自動添加陰影。
組合
有時候我們有的資源是幾個其他資源組合而成的,其實這時候我們沒必要再重新切一個組合后的圖。
使用layer-list即可,通過設置位置,并且通過上面所說的旋轉等方法可以實現各種組合情況。
比如示例中:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:width="12dp"android:height="12dp"><shape android:shape="oval"><solid android:color="#009bfa" /></shape></item><itemandroid:width="6dp"android:height="6dp"android:gravity="center"><shape android:shape="oval"><solid android:color="#ffffff" /></shape></item> </layer-list>我們通過兩個shape來實現一個類似靶子的效果。
透明度
也是使用bitmap標簽即可,通過android:alpha熟悉設置透明度。
裁剪
通過drawable的clip標簽即可,注意這里裁剪后還保持原圖片大小,只不過裁剪后的內容占據其中一部分
留白
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Android中的资源复用小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android事件分发机制之ACTION
- 下一篇: Android事件分发溯源详解