Android动画

来源:互联网 发布:一搜影咖软件 编辑:程序博客网 时间:2024/06/05 10:38
最近呢,在完善我的毕业设计的代码,有给它加一些动画效果啥的,还挺有意思的。可是偶尔不太记得各个动画效果,今天要来记录总结一下了,方便日后来回顾。
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表示完全不透明
现在采取用布局的方式来实现这个动画,先上效果图,这里是从透明到不透明的变化。
Android动画            Android动画
其中核心代码:点击事件中->
Animation animation  =AnimationUtils.loadAnimation(this, R.anim.alpha);
ivImg.startAnimation(animation);
配置文件res/anim/alpha.xml ->
Android动画
   
二.ScaleAnimation(缩放动画)
(1)fromX,toX分别是起始和结束时x坐标上的伸缩尺寸
(2)fromY,toY分别是起始和结束时y坐标上的伸缩尺寸
(3)pivotX,pivotY分别为伸缩动画相对于x,y坐标开始的位置
这个例子的java核心代码跟前面差不多,就不贴代码了
配置文件res/anim/scale.xml->
Android动画
其中fillAfter为false说明动画过后图片保持原来的状态,pivotX和pivotY为50%是代表从中心点开始伸缩,interpolate这里设置的速度是先加速后减速。
上个图看看:
Android动画       Android动画        Android动画

三. TranslateAnimation(位移动画)
(1)fromXDelta,fromYDelta分别是起始时X,Y的坐标
(2)toXDelta,toYDelta分别是结束时X,Y的坐标
配置文件res/anim/translate.xml->
Android动画
Android动画     Android动画
从0,0坐标位置,移动到100,100.

四.RotateAnimation(旋转动画)
(1)fromDegrees起始的角度
(2)toDegrees终止的角度
(3)pivotX,pivotY分别为旋转动画相对于x,y的坐标开始位置
配置文件res/anim/rotate.xml->
Android动画
演示是从0度,中心点为中心旋转360度,正负号表示的是顺旋转还是逆着旋转。
Android动画       Android动画       Android动画      Android动画

组合动画
有时候想要用多个动画来实现想要的效果也是可以的,可以组合动画。
方式一:两个动画A,B,然后先播放A,设置A的AnimationListener。当onAnimationEnd触发(即A播放完毕),开始播放B。
代码实现:
Android动画
用的前面的配置文件,这里的效果就是先从透明到不透明,结束后再来一次旋转。
Android动画   Android动画   Android动画   Android动画

方式二:写一个动画集AnimationSet,在其中定义动画A和B,为动画B设置startOffset,其值就是前一个动画播放的所需的时间。
配置文件res/anim/set.xml ->
Android动画
java代码的点击事件跟前面演示四种动画一致,只需要加载这个文件即可,便是从透明到不透明,再从不透明到透明的动画。
Android动画      Android动画      Android动画
方式三:利用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动画
方式四:(Activity切换动画)
使用overridePendingTransition方法。参数:第二个activity退出时的动画,第一个activity进入动画。
恰好我的毕业设计就有用到这个方法,来实现activity的进入的退出动画效果。
我写在:
Android动画
这个方法里面。效果就不展示了。

LayoutAnimation(布局动画)
LayoutAnimation可以用来为ViewGroups添加动画,并按照预定的顺序,把一个动画(或者动画集合)应用到ViewGroups中的每一个子View中,可以使用LayoutAnimationController来指定一个应用ViewGroups中的每一个子View中的动画。
这里这个例子还挺有意思的,用listview来展示,一条一条的listview慢慢的划过来,这里为了方便,直接截取我毕业设计的中间核心代码来看看这里例子。
配置文件res/anim/listview_in.xml
Android动画

在java代码中定义两个变量:
private Animation animation;
private LayoutAnimationController lac;
加上初始化的方法,记得在onCreate中调用这个方法。
private void initAnimation() {
animation  =AnimationUtils.loadAnimation(this, R.anim.listview_in);
lac = new LayoutAnimationController(animation);
lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
}
我的代码是在handler中给listview设置adapter的,因此我在给listview设置完adapter后,添加两行代码,即可完成动画效果了。
Android动画
效果图:
Android动画      Android动画
只能截图了,配置文件还可以用其他动画,运行起来效果挺有意思的。

FrameAnimation(逐帧动画)
使用animation-list标签来分组一个item标签集合,定义要显示的图片,指定显示它的时间(单位是毫秒)
java代码中的点击事件代码:
ivImg.setImageResource(R.drawable.list);
AnimationDrawable animationDrawable = (AnimationDrawable)ivImg.getDrawable();  
animationDrawable.start();  
配置文件res/drawable/list.xml
Android动画
然后就实现了图片的一张张换片的效果了。
Android动画     Android动画     Android动画    Android动画

0 0
原创粉丝点击