Android-动画

视图动画-属性动画

Posted by Tan Lin on May 2, 2019

背景

动画种类太多… 到底该用什么动画,之前一直没明白 补间动画、帧动画与视图动画关系。
直到 Carson_Ho 这篇介绍后,明白了许多

View Animation

主要处理View的动画,平移、旋转、缩放、颜色、背景透明度(不透明度)

Tween Animation/补间动画

<!--视图动画: res/anim/xxx.xml-->
repeatCount, interpolator(插值器, 可以自定义插值器)
fromXDelta --> toXDelta;  fromXScale --> toXScale; fromAlpha --> toAlpha

Drawable Animation/帧动画

将动画资源(即每张图片资源)放到 drawable文件夹里

XML 方式 res/anim/test.xml

<!--步骤1:创建anim文件-->
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" // 设置是否只播放一次,默认为false
    >
    <item android:drawable="@drawable/a0" android:duration="100"/>
    <item android:drawable="@drawable/a1" android:duration="100"/>
    <item android:drawable="@drawable/a2" android:duration="100"/>
    <item android:drawable="@drawable/a3" android:duration="100"/>
    <item android:drawable="@drawable/a4" android:duration="100"/>
</animation-list>
// 步骤2:java
iv.setImageResource(R.drawable.knight_attack);
// 1. 设置动画
animationDrawable = (AnimationDrawable) iv.getDrawable();
// 2. 获取动画对象
animationDrawable.start();
// 3. 启动动画

Java 方式 newAnimationDrawable()

<!-- 帧动画:res/drawable/xxx.xml -->
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

Property Animation Android3.0 (API-11) +

<!--属性动画: res/animator/xxx.xml -->
ValueHolder,ObjectAnimator
translationX,translationY:控制View的位置,值是相对于View容器左上角坐标的偏移。
rotationX,rotationY:控制相对于轴心旋转。
x,y:控制View在容器中的位置,即左上角坐标加上translationX和translationY的值。
alpha:控制View对象的alpha透明度值。

总结

视图动画:无改变动画的属性 因为视图动画在动画过程中仅对图像进行变换,从而达到了动画效果

变换操作包括:平移、缩放、旋转和透明

属性动画:改变了动画属性 因属性动画在动画过程中对动态改变了对象属性,从而达到了动画效果

特别注意 使用视图动画时:无论动画结果在哪,该View的位置不变 & 响应区域都是在原地,不会根据结果而移动; 而属性动画 则会通过改变属性 从而使动画移动

动画参考 CSDN-Carson_Ho