Подтвердить что ты не робот

Android и воспроизведение анимации SVG

Я пишу приложение для Android, и я бы хотел сыграть простую анимацию SVG. Я знаю, что Android не предлагает поддержку SVG; какие у меня варианты?

4b9b3361

Ответ 1

  • Возьмите изображение SVG и преобразуйте его в VectorDrawable здесь
  • Добавьте загруженный файл 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>
    

3 Теперь создайте AnimatedVectorDrawable, где вы ссылаетесь на rotGroup и морфинг пути в созданном VectorDrawable

<?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>

4 Создайте два аниматора для AnimatedVectorDrawable:

<objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />

и:

<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>

(Также можно определить все это в одном файле, см. docs здесь)

Один из способов начать анимацию - получить доступный из представления и запустить start().