向量圖SVG的使用

weixin_34292287發表於2018-12-16

向量圖SVG的簡介


SVG是全球資訊網聯盟 (W3C) 制定的一個基於 XML 的開放式標準,在Android Studio中,可以做為圖片資源匯入專案。

使用向量圖SVG的好處:

可以減小 APK 的尺寸,因為可以針對不同螢幕密度調整同一檔案的大小,而不會降低影像質量。

向量圖SVG在Android中的相容性:

在Android 5.0 (API 21) 及更高版本,已經支援SVG。而Android 4.4(API 20)及更低版本不支援向量圖,Android Studio可在構建時針對每種螢幕密度將向量圖轉換為不同大小的PNG圖。

向量圖SVG的使用


使用的過程主要是匯入SVG檔案

1、在Android Studio中,右鍵src/main/res資料夾,New > Vector Asset

2、在Asset Sutdio彈窗中,在Asset Type選擇Local file,在Path中選擇要匯入SVG檔案的路徑。其他預設不修改,然後點選Next。

2707477-aa0e9863595732d3.png
image.png

3、可以選擇更改資源目錄,預設在main中,點選Finish。定義向量圖的 XML 檔案新增到專案的 app/src/main/res/drawable/ 資料夾中。可以在佈局檔案像引用PNG圖一樣,引用這些匯入的向量圖資源。

向量圖SVG的注意點


1、在構建專案時,預設情況下,如果最低API級別為 Android 4.4(API 級別 20)及更低版本,則Android Studio將自動生成PNG檔案,用於低版本的相容性。可以在app/build/generated/res/pngs/debug/資料夾中檢視生成的 PNG 和 XML 檔案。

2、在上面的情況下,如果不希望自動生動PNG圖(PNG圖會佔用APK體積),那麼可以使用支援庫功能,相容在低版本使用SVG資源。

在app model的build.gradle檔案中新增一條宣告:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}

支援庫的版本需要23.2或更高版本。

這時候,無論最低API級別是多少,Android Studio都不會自動生成PNG圖,統一使用向量圖。

使用過程,還需要注意以下兩點:

(1)android:src屬性

在佈局檔案中,如果需要引用向量圖資源,則不能使用android:src屬性(AS會提示錯誤),對應改成app:srcCompat屬性。

(2)android:background屬性

在佈局檔案中,不能使用android:background屬性引用向量圖資源,作為背景圖(在Android 4.4及更低版本會報崩潰)。

這時候需要在程式碼中,使用VectorDrawableCompat.create,動態新增背景圖

mRootView.setBackground(VectorDrawableCompat.create(getResources(), R.drawable.ic_stat_notify_dfu, getActivity().getTheme()));

參考

Android官方指導 Add multi-density vector graphics

相關文章