最近呢,在完善我的毕业设计的代码,有给它加一些动画效果啥的,还挺有意思的。可是偶尔不太记得各个动画效果,今天要来记录总结一下了,方便日后来回顾。
Android基础动画:
1. Tween Animation
变换动画
2. Frame Animation
帧动画
3. Layout Animation
布局动画
4. Property Animation 属性动画(相对复杂)
Tween Animation (变换动画)
1. Alpha : 渐变透明度动画
2. Scale : 渐变尺寸缩放动画
3. Translate : 位置移动动画
4. Rotate : 旋转动画
Tween Animation共同属性
1. Duration : 动画持续时间(单位 : 毫秒)
2. fillAfter : 设置为true,动画转化在动画结束后被应用
3. fillBefore : 设置为true,动画转化在动画结束开始前被应用
4. interpolator : 动画插入器(加速、减速插入器)
5. repeatCount : 动画重复次数
6. repateMode : 顺序重复/倒序重复
7. startOffset : 动画之间的时间间隔
Animation实现方式:
(1)配置文件(/res/anim)----- alpha、scale、translate、rotate
(2)Java代码实现 ----- AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation
一. AlphaAnimation(透明度动画)
(1)fromAlpha: 动画起始时透明度
(2)toAlpha: 动画终止时的透明度
0.0 表示完全透明 1.0表示完全不透明
现在采取用布局的方式来实现这个动画,先上效果图,这里是从透明到不透明的变化。
其中核心代码:点击事件中->
Animation animation
= AnimationUtils.loadAnimation(this, R.anim.alpha);
其中fillAfter为false说明动画过后图片保持原来的状态,pivotX和pivotY为50%是代表从中心点开始伸缩,interpolate这里设置的速度是先加速后减速。
四. RotateAnimation(旋转动画)
LayoutAnimation(布局动画)
ivImg.startAnimation(animation);
配置文件res/anim/alpha.xml ->
二. ScaleAnimation(缩放动画)
(1)fromX,toX分别是起始和结束时x坐标上的伸缩尺寸
(2)fromY,toY分别是起始和结束时y坐标上的伸缩尺寸
(3)pivotX,pivotY分别为伸缩动画相对于x,y坐标开始的位置
这个例子的java核心代码跟前面差不多,就不贴代码了
配置文件res/anim/scale.xml ->
![Android动画 Android动画](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
其中fillAfter为false说明动画过后图片保持原来的状态,pivotX和pivotY为50%是代表从中心点开始伸缩,interpolate这里设置的速度是先加速后减速。
上个图看看:
三. TranslateAnimation(位移动画)
(1)fromXDelta,fromYDelta分别是起始时X,Y的坐标
(2)toXDelta,toYDelta分别是结束时X,Y的坐标
配置文件res/anim/translate.xml ->
配置文件res/anim/translate.xml ->
从0,0坐标位置,移动到100,100.
四. RotateAnimation(旋转动画)
(1)fromDegrees起始的角度
(2)toDegrees终止的角度
(3)pivotX,pivotY分别为旋转动画相对于x,y的坐标开始位置
配置文件res/anim/rotate.xml ->
组合动画
有时候想要用多个动画来实现想要的效果也是可以的,可以组合动画。
方式一:两个动画A,B,然后先播放A,设置A的AnimationListener。当onAnimationEnd触发(即A播放完毕),开始播放B。
代码实现:
方式二:写一个动画集AnimationSet,在其中定义动画A和B,为动画B设置startOffset,其值就是前一个动画播放的所需的时间。
配置文件res/anim/set.xml ->
方式三:利用Animation的setRepeatCount、setRepeatMode来实现动画循环。
这里即实现了一种闪烁的效果。
java点击事件中的代码:
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
alphaAnimation.setDuration(100);
alphaAnimation.setRepeatCount(20);
alphaAnimation.setRepeatMode(Animation.REVERSE);// 倒序排序REVERSE,正序排序RESTART
ivImg.startAnimation(alphaAnimation);
![Android动画 Android动画](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
![Android动画 Android动画](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
方式四:(Activity切换动画)
使用overridePendingTransitio
n方法。参数:第二个activity退出时的动画,第一个activity进入动画。
恰好我的毕业设计就有用到这个方法,来实现activity的进入的退出动画效果。
我写在:
LayoutAnimation(布局动画)
LayoutAnimation可以用来为View Groups添加动画,并按照预定的顺序,把一个动画(或者动画集合)应用到View Groups中的每一个子View中,可以使用LayoutAnimationControlle
r来指定一个应用View Groups中的每一个子View中的动画。
这里这个例子还挺有意思的,用listview来展示,一条一条的listview慢慢的划过来,这里为了方便,直接截取我毕业设计的中间核心代码来看看这里例子。
配置文件res/anim/listview_in.xml
在java代码中定义两个变量:
private Animation animation;
private LayoutAnimationControlle
r lac;
加上初始化的方法,记得在onCreate中调用这个方法。
private void initAnimation() {
animation
= AnimationUtils.loadAnimation(this, R.anim.listview_in);
lac = new LayoutAnimationControlle
r(animation);
lac.setOrder(LayoutAnimationControlle
r.ORDER_NORMAL);
}
我的代码是在handler中给listview设置adapter的,因此我在给listview设置完adapter后,添加两行代码,即可完成动画效果了。
FrameAnimation(逐帧动画)
使用animation-list标签来分组一个item标签集合,定义要显示的图片,指定显示它的时间(单位是毫秒)
使用animation-list标签来分组一个item标签集合,定义要显示的图片,指定显示它的时间(单位是毫秒)
java代码中的点击事件代码:
ivImg.setImageResource(R.drawable.list);
AnimationDrawable animationDrawable = (AnimationDrawable) ivImg.getDrawable();
animationDrawable.start();
配置文件res/drawable/list.xml