2

AnimatedVectorDrawable

Я интересно, если можно создать два вектор в вводимого коэффициента Android и анимировать его автоматически от первого вектора второй.Есть ли способ, чтобы автоматически анимировать VectorDrawable, установив время начала и окончание векторов

Что-то вроде ViewTransiton и TransitionManager.go

+1

Ответ на основном нет; вам нужно самостоятельно создать конкретную анимацию. Я знаю только один инструмент, который выполняет некоторую автоматизацию: VectAlign https://github.com/bonnyfone/vectalign, но вы получите смешанные результаты. –

ответ

5

У вас есть рисует вектор (@ вытяжка/vector.xml):

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:viewportWidth="170" 
    android:viewportHeight="170" 
    android:width="500dp" 
    android:height="500dp"> 
    <path 
     android:name="my_vector_path" 
     android:fillColor="#FF000000" 
     android:pathData="M85,40 
          c10,0 20,0 30,0 
          c0,-5 -10,-20 -30,-20 
          c-20,0 -30,15 -30,20 
          c10,0 20,0 30,0" 
    /> 
</vector> 

Создать анимированный вектор (@ вытяжки/animated_vector.xml) :

<?xml version="1.0" encoding="utf-8"?> 
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" 
       android:drawable="@drawable/vector" > 
    <target 
     android:name="my_vector_path" 
     android:animation="@anim/vector_animation" 
    /> 
</animated-vector> 

Создание анимации ция (@ Anim/vector_animation.xml):

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <objectAnimator 
     android:duration="2000" 
     android:propertyName="pathData" 
     android:valueType="pathType" 
     android:valueFrom="M85,40 
          c10,0 20,0 30,0 
          c0,-5 -10,-20 -30,-20 
          c-20,0 -30,15 -30,20 
          c10,0 20,0 30,0" 
     android:valueTo="M108,35 
         c5.587379,-6.7633 9.348007,-16.178439 8.322067,-25.546439 
         c-8.053787,0.32369 -17.792625,5.36682 -23.569427,12.126399 
         c-5.177124,5.985922 -9.711121,15.566772 -8.48777,24.749359 
         c8.976891,0.69453 18.147476,-4.561718 23.73513,-11.329308"/> 
</set> 

Анимация содержит from и to значения вектора пути.

Наконец, в коде запуска анимации:

ImageView imageView = (ImageView) findViewById(R.id.image_view); 
AnimatedVectorDrawable animatedVectorDrawable = 
     (AnimatedVectorDrawable) getDrawable(R.drawable.animated_vector); 
imageView.setImageDrawable(animatedVectorDrawable); 
animatedVectorDrawable.start();