Android动画详解-补间动画-基础篇
最近学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();
好了,关于补间动画基础已经介绍完毕了,第一篇博客,内容偏简单,如果内容出现错误,希望告诉我。后序会继续更新,使用补间动画完成一些有趣的动画
上一篇: Android 动画之属性动画
下一篇: Android动画设计(基础篇)