Android矢量图VectorDrawable

一、前言

我们通常使用的图片有.jpeg.gif.png(三格图) 和.svg(矢量图)放大不失真,存储也方便。

  • 1.三格图:是由一个一个像素点构成的,所以硬件对它处理的时候,非常大的优势。UPU可以根据每个像素点去做计算处理,所以加载数据会很快。
  • 2.矢量图:是有CPU所计算的,绘制的速度会比三格图慢点,但是它的好处在于可缩放性。

如果对三格图进行一定极的缩放,那么图像的边缘会出现很多锯齿。那是因为三格图不具有缩放性的,那么矢量图不一样,因为它的每一个点是由CPU计算出来的。
所以经行任何比例的缩放,它都不会失真。这一点就是矢量图与三格图最大的差距。

二、什么是SVG

SVG--前端中使用,是一套语法规范。在android中就是矢量图。Vector ---在Android中使用,Vector只实现了SVG语法的Path标签。 SVG有很多语法格式,支持很多标签。Android使用Path标签来模拟其他所有的数据。虽然数据复杂点,但对它的解析效率很大帮助,这样既能保证兼容大部分的SVG图像,同时也极大的提高了解析的数据。Vector在Android的效率极大的提高。

三、Vector的常用的语法

Vector的常用的语法:是一个标注型语法。通过数组和字母的组合来描述一个路径。那么它不同的字母代表不同的含义。

M = moveto(M X,Y):将画笔移动到指定的坐标位置。
L = lineto(L X,Y):画直线到指定的坐标位置
Z = closepath():关闭路径

H = horizontal lineto(H X): 画水平线到指定的X坐标位置
V = vertical lineto(V Y):画垂直线到指定的Y坐标位置

   //定义图像被划分的比例大小



pathData 表述的是Vector具体的图像。

四、静态的VectorDrawbale

在控件中使用
ImageView\ImageButton
-----app:srcCompat = "@drawable/vector_image"

Button
-----通过Selector来进行设置,并开启下面的设置

 state {
     AppCompatDelegate
     .setCompatVectorFromResourcesEnabled(true);
 }

其中Vector_image的VectorDrawable的代码 (矩形图片)






五、动态的VectorDrawbale

VectorDrawable的优点:缩放不失真 和 使PNG的体积大幅度减小 还可以更好的使用动画。要使属性动画作用在具体的VectorDrawable中去,需要配置动画的粘合剂。

配置动画的粘合剂-----------animated-vector ( animated-vector +animator(属性动画))







向左平移属性动画




向右平移属性动画




VectorDrawable箭头图片代码


   
      
  

  
      
  

VectorDrawable属性动画代码实现

public void anim(View view) {
    ImageView imageView = (ImageView) view;
    Drawable drawable = imageView.getDrawable();
    if(drawable instanceof Animatable) {
        ((Animatable)drawable).start();
    }
}

VectorDrawable可以通过配置其长度、颜色、位置等属性值,以及配置动画的粘合剂,达到你预想不到的动画效果。

你可能感兴趣的:(Android矢量图VectorDrawable)