Android和播放SVG动画

SK9*_*SK9 35 animation svg android

我正在写一个Android应用程序,我想玩一个简单的SVG动画.我知道Android不提供SVG支持; 我有什么选择?

nil*_*lsi 6

  1. 把你的SVG图像,并将其转换为VectorDrawable 这里
  2. 将下载的XML文件添加到项目中,看看它的外观.下面是一个为旋转和路径变形动画准备的VectorDrawable示例:

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:height="64dp"
     android:width="64dp"
     android:viewportHeight="600"
     android:viewportWidth="600" >
     <group
         android:name="rotationGroup"
         android:pivotX="300.0"
         android:pivotY="300.0"
         android:rotation="45.0" >
         <path
             android:name="v"
             android:fillColor="#000000"
             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
     </group>
    
    Run Code Online (Sandbox Code Playgroud)

3现在创建一个AnimatedVectorDrawable,在其中引用创建的VectorDrawable中的rotationGroup和path morph

<?xml version="1.0" encoding="UTF-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vectordrawable">
   <target android:name="rotationGroup" android:animation="@anim/rotation" />
   <target android:name="v" android:animation="@anim/path_morph" />
</animated-vector>
Run Code Online (Sandbox Code Playgroud)

4为AnimatedVectorDrawable创建两个动画师:

<objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />
Run Code Online (Sandbox Code Playgroud)

并且:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="3000"
        android:propertyName="pathData"
        android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z"
        android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
        android:valueType="pathType"/>
 </set>
Run Code Online (Sandbox Code Playgroud)

(也可以在一个文件中定义所有这些,请参考这里文档)

然后启动动画的一种方法是从视图中获取drawable并运行start().

  • @RoCkVangeance的教训是Google试图重塑车轮。为什么不支持标准的本地svg(和css动画),而不是Android特定的&lt;vector&gt;和&lt;objectAnimator&gt;?回答Google,人们想知道! (2认同)

Vol*_*myr 6

从Android Lollipop(API级别21)开始,可以使用AnimatedVectorDrawable实现。

还有一些工具可以使矢量可绘制的shapeshifter动画化, 以及来自shapeshifter 图标动画技术简介的作者的博客文章。