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

来源:互联网 发布:java socket连接池 编辑:程序博客网 时间:2024/06/18 04:59

最近学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();

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

原创粉丝点击