欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android动画详解-补间动画-基础篇

程序员文章站 2022-03-16 14:37:38
...

最近学Android有点枯燥乏味,总是学初级知识确实很没有意思。于是准备好好研究一下天天从网上抄的动画究竟是怎么实现的。

Android动画分为三类: (1)补间动画 (2)帧动画 (3)属性动画

本篇我们谈谈补间动画,网上百度动画一般都是补间动画,可应付简单的动画效果,不过得注意补间动画在用于view时只是在视觉上的效果,实际上view的位置、大小等属性并没有改变。比如:如果用补间动画移动了一个view当你点击视觉上的view时并不会触发监听,但是点击view原来的位置时会触发。

补间动画实现效果分为四类:
(1)透明度:alpha
(2)缩放:scale
(3)平移:translate
(4)旋转:rotate

以上四种效果都可以通过定义相关类进行参数设置或者在xml中定义属性进行使用,一般使用xml方式较多,主要是复用性比较强,还有就是代码看起来比较整洁。下面我们就来试试这两种方式
(1)透明度:alpha

Xml定义(tween_alpha.xml):一般放在res下anim(自己建文件夹)

<?xml version="1.0" encoding="utf-8"?>
<!-- xml固定书写格式 
 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" > 

    <!-- 
       透明度动画设置
        1.fromAlpha:动画开始时的透明度1.0代表完全显示
        2.toAlpha:动画结束时的透明度0.0代表完全隐藏
        3.duration:动画持续的时间
        4.repeatCount:动画重复的次数
        5.repeatMode:动画重复的样式 
            (1)reverse代表透明度由1.0->0.0->1.0->0.0....
            (2)restart代表透明度由1.0->0.0,1.0->0.0.....
        6.interpolator:动画变换的速率,系统内置了很多,有些也可以进行简单的自定义。功能比如先变换快再慢、先慢再快。
     -->
    <alpha 
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration="3000"
        android:repeatCount="5" 
        android:repeatMode="reverse" 
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

Java代码中使用定义的xml:startAnimation该方法为View的方法。

Animation alpha_animation=AnimationUtils.loadAnimation(
TweenAnimationActivity.this,R.anim.tween_alpha);
            imageView1.startAnimation(alpha_animation);
            alpha_animation.start();

以上代码应该不用解释,都是Android内置的一些类方便我们操作动画。

(2)缩放:scale
Xml定义(tween_scale.xml):一般放在res下anim(自己建文件夹)

<?xml version="1.0" encoding="utf-8"?>
<!-- xml固定书写格式
    1.fillAfter设置动画结束后是否保持最后一刻的状态,注意fillAfter写在set里面才有效
 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"   
    android:fillAfter="true"> 

    <!-- 
       缩放动画效果
    1.fromXScale:开始缩放(X轴)比例1.0代表不缩放,0.0代表缩放成点
    2.fromYScale:开始缩放(Y轴)比例
    3.pivotX:缩放的中心点
       注:fromXScale,toXScale,fromYScale,toYScale使用时需要全部设置值,
              否则默认为0则出现瞬间消失的效果,假如你不想让Y轴缩放只要如此设置
              android:fromYScale="1.0"
              android:toYScale="1.0"

     -->
     <scale
       android:fromXScale="1.0"
       android:toXScale="0.0" 
       android:fromYScale="1.0"
       android:toYScale="0.0"
       android:pivotX="0%"
       android:pivotY="0%"
       android:duration="3000"/>
</set>

Java代码中使用定义的xml

Animation scale_animation=AnimationUtils.loadAnimation(TweenAnimationActivity.this, R.anim.tween_scale);
            imageView1.startAnimation(scale_animation);
            scale_animation.start();

等等现在需要解释一下,有人可能看着这要问不是说要介绍xml和代码定义两种方式设置动画的吗?因为四种方式其实在使用中用法都是差不多的,所以为了减少重复的内容,前两种使用xml定义的方式,后两种使用代码设置参数的方式。

(3)平移:translate
代码设置动画参数:TranslateAnimation 对应的动画类,相应的上述两种也有对应的参数类,名字起的方式是一样的。

/**
             * 平移动画设置TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
             * fromXDelta:x轴平移开始时的坐标
             * toXDelta:    x轴平移结束时的坐标
             */
            TranslateAnimation translate_Animation=new TranslateAnimation(0, width-image_x, 0, height-image_y);
//          translate_Animation.setFillAfter(true);//设置动画结束时保持最后一个动作
            translate_Animation.setDuration(5000);
            /**
             * 设置动画变换时监听
             * 1.onAnimationStart动画开始时执行
             * 2.onAnimationRepeat动画重复执行时调用
             * 3.onAnimationEnd动画结束时调用
             *这里我并没有用到该方法 ,只是想介绍一下而已
             */
            translate_Animation.setAnimationListener(new Animation.AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                }
            });
            imageView1.startAnimation(translate_Animation);
            translate_Animation.start();

(4)旋转:rotate

/**
             * 旋转动画设置:
             * RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
             * 构造方法很明显,和xml编辑时参数设置保持一致,不过设置时没有xml方便
             * pivotX、pivotY旋转时的中心点
             */
            RotateAnimation rotate_animation=new RotateAnimation(0, 360, 50, 50);
            rotate_animation.setDuration(3000);
            imageView1.startAnimation(rotate_animation);
            rotate_animation.start();

好了,关于补间动画基础已经介绍完毕了,第一篇博客,内容偏简单,如果内容出现错误,希望告诉我。后序会继续更新,使用补间动画完成一些有趣的动画