Назад к вопросам
Middle
71
questionbank

Какие существуют способы создания анимаций в View?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Property Animation (API 11+). Анимирует любое свойство объекта. Самый гибкий и мощный способ. Использует классы ValueAnimator, ObjectAnimator, AnimatorSet.

    • XML-файлы в каталоге res/animator/.
    • Программное создание.
    <!-- res/animator/fade_in.xml -->
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueFrom="0.0"
        android:valueTo="1.0"/>
    
    val animator = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)
    animator.duration = 500
    animator.start()
    
  2. View Animation (Tween Animation). (Устаревший, но все еще используется для простых анимаций). Анимирует свойства отрисовки View (позиция, размер, прозрачность, поворот).

    • XML-файлы в каталоге res/anim/.
    • Программное создание с классами AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation, AnimationSet.
    <!-- res/anim/slide_in_left.xml -->
    <translate
        android:duration="500"
        android:fromXDelta="-100%"
        android:toXDelta="0%"/>
    
    val animation = TranslateAnimation(
        Animation.RELATIVE_TO_SELF, -1f,
        Animation.RELATIVE_TO_SELF, 0f,
        Animation.RELATIVE_TO_SELF, 0f,
        Animation.RELATIVE_TO_SELF, 0f
    )
    animation.duration = 500
    myView.startAnimation(animation)
    
  3. Drawable Animation (Frame Animation). Последовательное отображение серии Drawable ресурсов (изображений) с заданным интервалом.

    • XML-файлы в каталоге res/drawable/.
    • Программное создание.
    <!-- res/drawable/my_animation.xml -->
    <animation-list android:oneshot="false">
        <item android:drawable="@drawable/frame1" android:duration="200"/>
        <item android:drawable="@drawable/frame2" android:duration="200"/>
        <item android:drawable="@drawable/frame3" android:duration="200"/>
    </animation-list>
    
    val animationDrawable = myView.background as AnimationDrawable
    animationDrawable.start()
    
  4. ConstraintLayout Animation. Анимация изменений ограничений внутри ConstraintLayout с использованием ConstraintSet и TransitionManager.

    val constraintSet1 = ConstraintSet().apply { clone(containerLayout) }
    val constraintSet2 = ConstraintSet().apply { clone(this@MainActivity, R.layout.activity_main_alt) } // Другой XML с ограничениями
    
    // Переход с анимацией
    TransitionManager.beginDelayedTransition(containerLayout)
    constraintSet2.applyTo(containerLayout)
    
  5. Layout Transition Animation. Автоматическая анимация изменений в родительском контейнере при добавлении, удалении или скрытии дочерних View. Включается атрибутом android:animateLayoutChanges="true".

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:animateLayoutChanges="true">
        <!-- Дочерние View -->
    </LinearLayout>
    
  6. Vector Drawable Animation (AnimatedVectorDrawable). Анимация свойств векторных изображений (например, изменение пути, прозрачности).

    • XML-файлы в res/drawable/.
    <!-- res/drawable/animated_path.xml -->
    <animated-vector
        android:drawable="@drawable/vector_drawable">
        <target
            android:name="path_name"
            android:animation="@animator/path_morph"/>
    </animated-vector>
    
     <!-- res/animator/path_morph.xml -->
     <objectAnimator
         android:propertyName="pathData"
         android:valueFrom="..."
         android:valueTo="..."
         android:duration="500"/>