Android动画总结(一)

作者: 呼吸的蜗牛 | 来源:发表于2017-03-28 21:57 被阅读91次

    在我刚开始做移动App开发的时候,事实上,Android端的动画主要有2种:帧动画和补间动画。这两种动画,虽然能实现一些动画效果,然而却都存在着不小的缺陷。伴随着Android3.0的推出,google推出了更为强大的属性动画,前两种动画逐渐被替代。本篇文章也直接省略帧动画和补间动画,着重介绍属性动画。
    首先介绍一下,最简单也最常用的几种动画:

     //渐变动画
     public void runAlphaAnimation(View view) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0.1f, 1.0f);
        animator.start();
    }
    
    //平移动画
    public void runTranslateAnimation(View view) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0.5f, 80f);
        animator.start();
    }
    
    //缩放动画
    public void runScaleAnimation(View view) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
        animator.start();
    }
    
    //旋转动画
    public void runRotateAnimation(View view) {
        PropertyValuesHolder yHolder = PropertyValuesHolder.ofFloat("rotationY", 0f, 90f, 180f, 360f);
        PropertyValuesHolder xHolder = PropertyValuesHolder.ofFloat("rotationX", 0f, 90f, 180f, 360f);
        ObjectAnimator.ofPropertyValuesHolder(view, yHolder, xHolder).setDuration(1000).start();
    }
    

      上面四种动画,基本涵盖了补间动画的所有操作。<code>PropertyValuesHolder </code>这个类,需要说明一下。它的作用,是可以把动画临时存储起来,然后播放动画时,同时执行。其效果等同于:

        ObjectAnimator xanimator = ObjectAnimator.ofFloat(view, "scaleX", 0.1f, 1.0f);
        ObjectAnimator yanimator = ObjectAnimator.ofFloat(view, "scaleY", 0.1f, 1.0f);
        AnimatorSet set = new AnimatorSet();
        set.play(xanimator).with(yanimator);
    

    除了上面这4种最常用的,还有一种帧动画,我们也会经常需要用到。就是帧动画,可以参考帧动画替代方案这篇文章。不过使用的时候需要在布局文件中添加该控件,否则没有效果。

        <com.fragmenttest.LevelImageView
        android:id="@+id/image"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_marginTop="20dp"/>
    
        java文件中:
    
        LevelImageView imageView     = (LevelImageView) findViewById(R.id.image);
       //设置level资源.
        imageView.setImageResource(R.drawable.level_image);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        //新建动画.属性值从1-10的变化
        ObjectAnimator headerAnimator = ObjectAnimator.ofInt(imageView, "imageLevel", 1, 4);
        //设置动画的播放数量为一直播放.
        headerAnimator.setRepeatCount(ObjectAnimator.INFINITE);
        //设置一个速度加速器.让动画看起来可以更贴近现实效果.
        headerAnimator.setInterpolator(new LinearInterpolator());
        headerAnimator.setRepeatMode(ObjectAnimator.RESTART);
        headerAnimator.setDuration(600);
        headerAnimator.start();

    相关文章

      网友评论

        本文标题:Android动画总结(一)

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