Vector Drawable实现动画(兼容问题没涉及)

前言

首先,需要讲解两个概念——SVG和Vector。

  • SVG,即Scalable Vector Graphics 可缩放的矢量图,这种图像格式在前端中已经使用的非常广泛了。这种图片的最大特点就是自由拉伸不失真。

  • Vector,在Android中指的是Vector Drawable,也就是Android中的矢量图。因此,可以说Vector就是Android中的SVG实现。

Vector Drawable在Android的存在形式主要是XML形式。设置只要

 

(用src还是srccompat会有区别的,还未研究)

Vector Drawable实现动画(兼容问题没涉及)_第1张图片

文件aa.xml如下:



    
        
            
            
            
        
        
            
            
        
        
    

至于这其中的属性,参考此篇文章

优点

  • 自动适配,不需要多套视图,拉伸缩小不变形
  • Vector图像可以大幅减少图像的体积,同样一张图,用Vector来实现,可能只有PNG的几十分之一
  • 不需要很多代码,就可以实现复杂的动画

注:以前有三种的实现动画方式,其中属性动画objectAnimator??????

获得Vector

第一步就是如何获得Vector这个xml文件。

有两种方法:

  • 阿里巴巴矢量图上提供很多精美的图片,其中就有SVG,PNG,AI三种方法输出,选择SVG,下载下来就是.SVG文件。这种方法的缺点就是不一定有你想要的图片

  • 手头上有png的图片资源,找美工,使用PS、Illustrato工具,都是可以输出SVG格式文件.

  • 使用android studio里面的功能 ,将SVG文件转化成Vector Drawable

Vector Drawable实现动画(兼容问题没涉及)_第2张图片

Vector Drawable实现动画(兼容问题没涉及)_第3张图片

2.有在线将普通图像转换为Android Vector Drawable的网站,使用方便,自己动手,丰衣足食

指定动画

AnimatedVectorDrawable可以让VectorDrawable动起来。AnimatedVectorDrawable通过改变VectorDrawable的属性来让VectorDrawable呈现动画效果。

通常定义一个AnimatedVectorDrawable需要以下三个xml文件:

1.vector drawable本身:

2.一个或者多个属性动画文件:res/drawable/中定义一个有元素的xml文件。

3.vector drawable的动画文件(Animated vector drawable):res/drawable/中定义一个有元素的xml文件。用来指定属性动画文件对应于vector drawable的是哪一部分。

例如,针对上面的vector,我们定义一个动画animated_android.xml。




    

    



shrug.xml动画文件如下:


    

然后在代码中运行动画(动画演示一)

        ImageView androidImageView = (ImageView) findViewById(R.id.android);
        Drawable drawable = androidImageView.getDrawable();
        if (drawable instanceof Animatable) {
            ((Animatable) drawable).start();
        }

demo效果

动画演示一.GIF
动画演示二.gif

Vector特点

  • Vector Drawable应该相对简单,因为每一小块的图案都会生成一个PATH。可以通过动画来移动每一小块的图案,类似于把图片打碎。然后控制每个部分各自移动,最终的整体效果就会好。相对于Vector,属性动画更倾向于将整体,整个图片,进行缩放、平移、旋转,透明化等。

Vector性能问题

  • Bitmap的绘制效率并不一定会比Vector高,它们有一定的平衡点,当Vector比较简单时,其效率是一定比Bitmap高的,所以,为了保证Vector的高效率,Vector需要更加简单,PathData更加标准、精简,当Vector图像变得非常复杂时,就需要使用Bitmap来代替了
  • Vector适用于ICON、Button、ImageView的图标等小的ICON,或者是需要的动画效果,由于Bitmap在GPU中有缓存功能,而Vector并没有,所以Vector图像不能做频繁的重绘
  • Vector图像过于复杂时,不仅仅要注意绘制效率,初始化效率也是需要考虑的重要因素
  • SVG加载速度会快于PNG,但渲染速度会慢于PNG,毕竟PNG有硬件加速,但平均下来,加载速度的提升弥补了绘制的速度缺陷。

你可能感兴趣的:(Vector Drawable实现动画(兼容问题没涉及))