最近看到了一些关于Animation的内容,总结一下留待后用;
视图动画
我们在APP中看到的动画一般都是视图动画,那就先来总结一下视图动画;一般我们使用到的视图动画包括透明动画(AlphaAnimation)、旋转动画(RotateAnimation)、移动动画(TranslateAnimation)和缩放动画(ScaleAnimation)。我们先来看看运行效果图,然后再来呈现代码。
不多说了直接上代码
透明动画(AlphaAnimation)
纯java实现:
只需要在对应的button点击事件中添加AlphaAnimation即可:
findViewById(R.id.btn_alpha).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);//透明度从0~1
alphaAnimation.setDuration(1000);//持续时间
v.startAnimation(alphaAnimation);
}
});
java和xml结合条件下:
在res/anim下创建alpha.xml如下:
在java代码点击事件中添加上:
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha));
剩下的3个动画也和上面的方法类似,下面就简单的介绍一下
旋转动画(RotateAnimation)
纯java实现:
只需要在对应的button点击事件中添加RotateAnimation即可:
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//上述参数解释分别为:旋转起始角度,旋转结束角度,相对与自身,x轴方向的一半,相对于自身,y轴方向的一半
rotateAnimation.setDuration(1000);
v.startAnimation(rotateAnimation);
java和xml结合条件下:
在res/anim下创建rotate.xml如下:
在java代码点击事件中添加上:
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate));
移动动画(TranslateAnimation)
纯java实现:
TranslateAnimation translateAnimation = new TranslateAnimation(0,80,0,80);
//起始x轴,最终x轴,起始y轴,最终y轴
translateAnimation.setDuration(1000);
v.startAnimation(translateAnimation);
java和xml结合条件下:
在res/anim下创建translate.xml如下:
在java代码点击事件中添加上:
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate));
缩放动画(ScaleAnimation)
纯java实现:
ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1);//x轴0倍,x轴1倍,y轴0倍,y轴1倍
scaleAnimation.setDuration(1000);
v.startAnimation(scaleAnimation);
java和xml结合条件下:
在res/anim下创建scale.xml如下:
在java代码点击事件中添加上:
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale ));
混合动画
纯java实现:
AnimationSet animationSet = new AnimationSet(true);//共用动画补间
animationSet.setDuration(1000);
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(1000);
animationSet.addAnimation(alphaAnimation);
TranslateAnimation translateAnimation = new TranslateAnimation(0, 80, 0, 80);
translateAnimation.setDuration(1000);
animationSet.addAnimation(translateAnimation);
v.startAnimation(animationSet);
java和xml结合条件下:
在res/anim下创建blend_set.xml如下:
在java代码点击事件中添加上:
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.blend_set));
布局动画
先看效果图:
根据示意图我们发现button按钮出现的时间是不一样的,这就是对整个页面布局添加了动画之后的效果;我们来看一下如何实现的:
RelativeLayout activity_main = (RelativeLayout) findViewById(R.id.activity_main);
ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1);
scaleAnimation.setDuration(1000);
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(scaleAnimation,0.5f);//动画效果、每个动画效果之间延迟一半时间运行
layoutAnimationController.setOrder(LayoutAnimationController.ORDER_RANDOM);
//加载顺序:包括从上倒下(ORDER_NORMAL)、从下到上(ORDER_REVERSE)、随机(ORDER_RANDOM)
activity_main.setLayoutAnimation(layoutAnimationController);
实现步骤
- 先设置动画效果
- 利用LayoutAnimationController ()方法添加上动画、延迟时间以及出现顺序
- 然后找到布局对应的layout文件,使用setLayoutAnimation()方法即可
在第二页中的listview实现的动画效果是在xml中设置的,也比较简单:
在res/anim下创建list_animation.xml文件(借用上面的scale.xml文件):
在lsitview的xml文件下添加一句:
android:layoutAnimation="@anim/list_animation"
OK,以上功能完全实现~