第7章 动画

作者: littlefogcat | 来源:发表于2019-04-11 20:45 被阅读0次

动画这一章内容比较少,而且之前看的也比较多了。简单总结一下:

7.1 动画类型

7.1.1 View动画

View动画主要分为四种,平移TranslateAnimation、旋转RotateAnimation、缩放ScaleAnimation、透明度AlphaAnimation。这几种动画都是很常见很基本的,就不赘述了。
另外还有帧动画,也就是若干图片一帧帧连续播放,比如我们的开机图片就是帧动画。

7.1.2 View动画的特殊场景

  • LayoutAnimation:ViewGroup的子View的入场动画
  • Activity切换动画:在startActivity()方法或者finish()之后,调用overridePendingTransition(int, int)方法

7.1.3 属性动画

属性动画可以对任何对象使用,包括但不限于View。只要一个对象包含有get和set方法的属性,那么就可以对他使用属性动画。
比如我们写了这么一个类:

public class AnimatorSample {

    private float mFloat;

    public static void test() {
        AnimatorSample sample = new AnimatorSample();
        Animator animator = ObjectAnimator.ofFloat(sample, "float", 0, 1);
        animator.setDuration(1000);
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                float f = sample.getFloat();
                System.out.println("float = " + f);
                if (f > 0.99999) {
                    timer.cancel();
                }
            }
        };
        timer.schedule(task, 0, 50);
        animator.start();
    }

    public float getFloat() {
        return mFloat;
    }

    public void setFloat(float mFloat) {
        this.mFloat = mFloat;
    }
}

并调用他的test方法,我们会发现,这个AnimatorSample对象的mFloat从0增加到了1。


animator作用对象

可以看到,Animator的作用对象可以是任何对象。通过传入属性名,经过反射调用这个属性的getter和setter方法来进行取值和赋值。

7.1.4 揭露动画

在API21中,加入了揭露动画。通过调用ViewAnimationUtils.createCircularReveal()获取到一个Animator对象,其使用方式和普通Animator相同。

reveal animation.gif

7.2 使用动画的注意事项

  1. 帧动画的OOM
    使用帧动画的时候,如果图片较多、较大的时候,容易出现OOM。所以在平时开发中,尽量避免使用帧动画。

  2. 内存泄漏
    属性动画如果设置了无限循环,在退出界面的时候需要停止,否则将出现内存泄漏。

  3. 动画x点击事件
    在View执行TranslateAnimation之后,新位置点击View并不会触发点击事件,而在老位置点击可以触发View的点击事件。使用属性动画避免这种情况,触发点击事件的区域为新位置。
    造成这种区别的,是Animation并没有改变View本身的属性,而只是视觉效果;而属性动画是改变了View本身的属性值的。

相关文章

网友评论

    本文标题:第7章 动画

    本文链接:https://www.haomeiwen.com/subject/wthbbqtx.html