Android动画简述

  在Android开发中,我们往往会用到动画去优化一些显示不流畅,做一些显示酷炫的UI,如果把android比如成一个人的话,那动画就是这个人的精神面貌,时时刻刻反映着这个人的状况,哈哈,可能有些不恰当,但是实际上它确实是Android的一种美好修饰。话不多说,接下来我们就简单地讲解下动画的类型和使用。
  类型:
  <1>:   帧动画:图片按顺序一帧一帧地播放
  <2>:   补间动画:旋转(rotate),缩放(scale),位移(translate),透明度(alpha)
  <3>:属性动画:通过改动相应view的属性来实现动画效果

使用:

帧动画:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/a_0"
        android:duration="100" />
    <item
        android:drawable="@drawable/a_1"
        android:duration="100" />
    <item
        android:drawable="@drawable/a_2"
        android:duration="100" />
</animation-list>
protected void onCreate(@Nullable Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frame_animation);
        ImageView animationImg1 = (ImageView) findViewById(R.id.animation1);
        animationImg1.setImageResource(R.drawable.frame_anim1);
        AnimationDrawable animationDrawable1 = (AnimationDrawable) animationImg1.getDrawable();
        animationDrawable1.start();
    }

补间动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

透明度(alpha)
android:fromAlpha为动画开始的透明度【0:完全透明,1:完全不透明】
android:toAlpha为动画结束的透明度

缩放(scale)
android:fromXScale、android:fromYScale为动画开始X,Y方向上的缩放比例【0:小的没有,1:原本大小】
android:toXScale、android:toYScale为动画开始X,Y方向上的缩放比例
android:pivotX、android:pivotY为动画在X,Y方向上的缩放中心点(比如设置为0,0那么就是宽和高向左上角缩小)【例如:50%是距左边界图片一半的距离】

平移(translate)
android:fromXDelta、android:fromYDelta为动画平移的起始点
android:toXDelta、android:toYDelta为动画平移的结束点

旋转(rotate)
android:fromDegrees为动画旋转的起始角度【0:不动,180:转半圈,360:转一圈,3600:转10圈,-180逆时针转半圈】
android:toDegrees为动画旋转的结束角度
android:pivotX、android:pivotY为动画旋转的中心点【例如:50%是距左边界图片一半的距离】

通过xml新建完动画资源还需要使用AnimationUtils进行装载。
final Animation anim = AnimationUtils
.loadAnimation(this, R.anim.anim);
上面的R.anim.anim就是上面用xml写出来的动画文件。

在我们使用的时候,直接调用View的startAnimation方法就好了。
view.startAnimation(anim);

属性动画(ValueAnimator和ObjectAnimator)

ValueAnimator简单使用
使用流程:
1.调用ValueAnimator的ofInt(),ofFloat()或ofObject()静态方法创建ValueAnimator实例
2.调用实例的setXxx方法设置动画持续时间,插值方式,重复次数等
3.调用实例的addUpdateListener添加AnimatorUpdateListener监听器,在该监听器中 可以获得ValueAnimator计算出来的值,你可以值应用到指定对象上~
4.调用实例的start()方法开启动画! 另外我们可以看到ofInt和ofFloat都有个这样的参数:float/int… values代表可以多个值。

举例:
ValueAnimator vValue = ValueAnimator.ofFloat(1.0f, 0.6f, 1.2f, 1.0f, 0.6f, 1.2f, 1.0f);
vValue.setDuration(1000L);
vValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float scale = (Float) animation.getAnimatedValue();
view.setScaleX(scale);
view.setScaleY(scale);
}
});
vValue.setInterpolator(new LinearInterpolator());
vValue.start();

ObjectAnimator简单使用
比起ValueAnimator,ObjectAnimator显得更为易用,通过该类我们可以直接 对任意对象的任意属性进行动画操作!没错,是任意对象,而不单单只是View对象, 不断地对对象中的某个属性值进行赋值,然后根据对象属性值的改变再来决定如何展现 出来!比如为TextView设置如下动画: ObjectAnimator.ofFloat(textview, “alpha”, 1f, 0f);
这里就是不断改变alpha的值,从1f - 0f,然后对象根据属性值的变化来刷新界面显示,从而 展现出淡入淡出的效果,而在TextView类中并没有alpha这个属性,ObjectAnimator内部机制是: 寻找传输的属性名对应的get和set方法~,而非找这个属性值! 不信的话你可以到TextView的源码里找找是否有alpha这个属性。

举例:
animator1 = ObjectAnimator.ofFloat(view, “alpha”, 1f, 0f, 1f, 0f, 1f);
animator1.setDuration(1000l);
animator1.start();
animator2 = ObjectAnimator.ofFloat(view, “rotation”, 0f, 360f, 0f);
animator2.setDuration(2000l);
animator2.start();
animator3 = ObjectAnimator.ofFloat(view, “scaleX”, 2f, 4f, 1f, 0.5f, 1f);
animator3.setDuration(3000l);
animator3.start();
animator4 = ObjectAnimator.ofFloat(view, “translationY”, height / 8, -100, height / 2);
animator4.setDuration(4000l);
animator4.start();

以上为这三种动画实现的简述,写的比较简单,供大家参考下,其中比较复杂点的就是属性动画,这里大概说了下,如果需要知道其使用详细的方法,可以去google官网上查看相应的api使用,好了,有什么好的建议读者可以提出来,我将虚心接受大家的建议。

Guess you like

Origin blog.csdn.net/daxiangzaici/article/details/106116342