矢量圖SVG的使用

矢量圖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。
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章