Посмотреть анимацию

Попробуйте способ создания композиций.
Jetpack Compose — это рекомендуемый набор инструментов для создания пользовательского интерфейса для Android. Узнайте, как использовать анимации в Compose.

Для выполнения промежуточной анимации (tweeen animation) для элементов View можно использовать систему анимации представлений. Промежуточная анимация рассчитывается с учетом такой информации, как начальная точка, конечная точка, размер, поворот и другие общие параметры анимации.

Анимация типа «tween» позволяет выполнять ряд простых преобразований (изменение положения, размера, вращения и прозрачности) содержимого объекта View. Таким образом, если у вас есть объект TextView , вы можете перемещать, вращать, увеличивать или уменьшать текст. Если у него есть фоновое изображение, оно будет преобразовываться вместе с текстом. animation package предоставляет все классы, используемые в анимации типа «tween».

Последовательность инструкций анимации определяет анимацию перехода (tween animation), которая задается либо в XML, либо в коде Android. Как и при определении макета, рекомендуется использовать XML-файл, поскольку он более читабелен, многократно используется и легко заменяется, чем жестко заданная анимация. В приведенном ниже примере мы используем XML. (Чтобы узнать больше об определении анимации в коде вашего приложения вместо XML, обратитесь к классу AnimationSet и другим подклассам Animation .)

Инструкции анимации определяют желаемые преобразования, время их выполнения и продолжительность. Преобразования могут быть последовательными или одновременными — например, содержимое TextView может перемещаться слева направо, а затем поворачиваться на 180 градусов, или текст может перемещаться и вращаться одновременно. Каждое преобразование принимает набор параметров, специфичных для этого преобразования (начальный и конечный размеры для изменения размера, начальный и конечный углы для поворота и т. д.), а также набор общих параметров (например, время начала и длительность). Чтобы несколько преобразований выполнялись одновременно, задайте им одинаковое время начала; чтобы они выполнялись последовательно, вычислите время начала плюс длительность предыдущего преобразования.

XML-файл анимации должен находиться в каталоге res/anim/ вашего Android-проекта. Файл должен содержать один корневой элемент: это может быть либо один элемент <alpha> , <scale> , <translate> , <rotate> , interpolator, либо элемент <set> , содержащий группы этих элементов (который может включать еще один <set> ). По умолчанию все инструкции анимации применяются одновременно. Чтобы они выполнялись последовательно, необходимо указать атрибут startOffset , как показано в примере ниже.

Следующий XML-код из одного из ApiDemos используется для растягивания, а затем одновременного вращения и поворота объекта View.

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

Экранные координаты (не используются в этом примере) находятся в верхнем левом углу (0,0) и увеличиваются по мере продвижения вниз и вправо.

Некоторые значения, например pivotX, можно задавать относительно самого объекта или относительно родительского элемента. Убедитесь, что используете правильный формат для желаемого значения («50» для 50% относительно родительского элемента или «50%» для 50% относительно самого объекта).

Вы можете определить, как будет применяться преобразование с течением времени, назначив Interpolator . Android включает несколько подклассов интерполяторов, которые задают различные кривые скорости: например, AccelerateInterpolator указывает преобразованию начинаться с низкой скорости и ускоряться. Каждый из них имеет значение атрибута, которое можно указать в XML-файле.

Сохранив этот XML-файл как hyperspace_jump.xml в каталоге res/anim/ проекта, следующий код будет ссылаться на него и применять его к объекту ImageView из макета.

Котлин

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

Java

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

В качестве альтернативы методу startAnimation() вы можете задать время начала анимации с помощью Animation.setStartTime() , а затем назначить анимацию представлению с помощью View.setAnimation() .

Для получения дополнительной информации о синтаксисе XML, доступных тегах и атрибутах см. раздел «Ресурсы анимации» .

Примечание: Независимо от того, как перемещается или изменяется размер вашей анимации, границы представления, содержащего анимацию, не будут автоматически подстраиваться под неё. Тем не менее, анимация всё равно будет отображаться за пределами границ своего представления и не будет обрезана. Однако обрезание произойдёт , если анимация выйдет за пределы родительского представления.