vector drawable

1,VectorDrawable简介

VectorDrawable官方的描述如下

A VectorDrawable
is a vector graphic defined in an XML file as a set of points, lines, and curves along with its associated color information. The major advantage of using a vector drawable is image scalability. It can be scaled without loss of display quality, which means the same file is resized for different screen densities without loss of image quality. This results in smaller APK files and less developer maintenance. You can also use vector images for animation by using multiple XML files instead of multiple images for each display resolution.

实际上就是矢量图在Android上的应用,涉及的元素主要有点、线和颜色。VectorDrawable主要的优势是放大不会失真,可以适应不同的分辨率,也就是只需要提供一套矢量图的资源文件,大大减小包体积。

在Android是以xml的方式的存在,如下:



    android:height="24dp"
    android:width="24dp"
    
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
   
      
      
   

png图片的原图以及放大的展示如下:


vector drawable_第1张图片
0000.png

矢量图原图以及放大后的展示如下:


vector drawable_第2张图片
1111.png

NOTE:原图大小为24dp,放大倍数为10,从结果来png的方式放大后失真严重,矢量图的展示很完美

2,关于Vector Drawable的使用

2.1 版本兼容

谷歌在Android L(5.0)引入了矢量图,对应的api版本是21,主要涉及的类有2个,分别是 VectorDrawable
and AnimatedVectorDrawable

Support Library对于5.0之前的版本也提供了兼容的解决方案,分别是support-vector-drawable和animated-vector-drawable,对应的类是VectorDrawableCompat
和 AnimatedVectorDrawableCompat

VectorDrawableCompat最低兼容api7, AnimatedVectorDrawableCompat最低兼容到api11。

2.2 集成

    compile 'com.android.support:appcompat-v7:23.2.0'

或者

    compile 'com.android.support:support-vector-drawable:23.2.0'
    compile 'com.android.support:animated-vector-drawable:23.2.0'

support libraries的版本必须是大于等于23.2.0

2.3 配置

//For Gradle Plugin 2.0+
 android {
   defaultConfig {
     vectorDrawables.useSupportLibrary = true
    }
 }
//For Gradle Plugin 1.5 or below
android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag notifies aapt to keep the attribute IDs around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

2.4 使用

2.4.1 xml

替换android:src为app:srcCompat


2.4.2 Java code

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

2.4.3 类型转换

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   VectorDrawable vectorDrawable =  (VectorDrawable) drawable;
} else {
   BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
}

3 Vector Asset Studio

Vector Asset Studio 是Android Studio内置的一个辅助工具,作用是转换svg和psd为矢量图片资源。
Google提供一系列的material icons资源,可以直接下载设计好的svg图片资源,或者由设计师提供psd图片资源。有了svg或者psd资源,就可以利用Vector Asset Studio转换。

具体的过程如下:
1,右键res目录,选择New > Vector Asset
Vector Asset Studio就会被唤起

vector drawable_第3张图片
vas-materialicon_2-2_2x.png

2,设置图片资源的属性后,点击next就在drawable目录下生成了对应的矢量资源


    


3,在layout xml中或者java code中引入即可

4, 补充

Android L(Api 20)以下的版本只支持以下的属性


vector drawable_第4张图片
WX20170214-151605.png

你可能感兴趣的:(vector drawable)