矢量图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。
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()));