Android学习之Animation(一)
2016-01-18 09:36
519 查看
3.0以前,android支持两种动画模式,Tween Animation,Frame Animation,在android3.0中又引入了一个新的动画系统:Property Animation,这三种动画模式在SDK中被称为Property Animation,View Animation,Drawable Animation。
我今天要说的就是Tween Animation.要实现它有两种方式。
通过代码控制
通过xml文件进行控制(推荐)
先定义一个AnimationSet,用来“盛装”我们的Animation。
然后是创建相应的Animation(android中可以创建的Animation有四种,分别是AlphaAnimation,ScaleAnimation,TransAnimation以及RotateAnimation)。
然后根据帮助文档进行参数的设置就可以了
最后将设置好的Animation添加到AnimationSet中,就可以应用了。
下面是一个简单的代码:
小总结:
代码比较简单,就不再一一的进行说明了。
在AnimationSet中可以添加多个Animtion,实现不同的动画效果的叠加。
对于AnimationSet的属性的设置可以全部映射到其内部的所有的动画中。
在res目录下创建一个anim的文件夹(名称不必拘泥于这一个)
在anim文件夹下创建一个xml文件(以set标签内嵌套alpha,rotate,scale,translate等子标签的方式设置动画效果)
然后在使用到动画效果的地方用相关代码进行添加即可。(稍后详述)
下面是我的一个动画文件示例分解:
如alpha.xml。简单明了清晰
再看rotate.xml文件,其中pivotX属性的值分别代表着三种不同的情况(当然其他的属性值也是有这个情况滴)
android:pivotX=”60”;//绝对位置定位
android:pivotX=”60%”;//相对于控件自身的比例定位
android:pivotX=”60%p”;//相对于父控件的比例定位
再看translate.xml
最后是scale.xml.
完成了xml动画文件的设置,下一步当然是要进行使用了,否则要它做什么,我们可以使用下慢的代码来进行动画的使用。
同样的,其他的动画也可以这么做。
偷偷的告诉你,可以在一个xml文件中同时设置好几个子标签,来完成好几个动画的叠加效果哦。(即如果想要共享一个Interpolator的话,需要将android:shareInterpolator的值设置为true)。至于什么是Interpalotor,就是android自带的一些动画的效果在这个安装目录下可以看到。
我今天要说的就是Tween Animation.要实现它有两种方式。
通过代码控制
通过xml文件进行控制(推荐)
代码控制
大致的步骤是这样的:先定义一个AnimationSet,用来“盛装”我们的Animation。
然后是创建相应的Animation(android中可以创建的Animation有四种,分别是AlphaAnimation,ScaleAnimation,TransAnimation以及RotateAnimation)。
然后根据帮助文档进行参数的设置就可以了
最后将设置好的Animation添加到AnimationSet中,就可以应用了。
下面是一个简单的代码:
package com.summer.animationutils; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { private Button button_rotate,button_alpha,button_translate,button_scale; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView) findViewById(R.id.imageview1); button_rotate=(Button) findViewById(R.id.button_rotate); button_alpha=(Button) findViewById(R.id.button_alpha); button_translate=(Button) findViewById(R.id.button_translate); button_scale=(Button) findViewById(R.id.button_scale); button_rotate.setOnClickListener(new RotateAnimationListener()); button_alpha.setOnClickListener(new AlphaAnimationListener()); button_translate.setOnClickListener(new TranslateAnimationListener()); button_scale.setOnClickListener(new ScaleAnimationListener()); } class RotateAnimationListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); RotateAnimation rotateAnimation=new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setDuration(1500); animationSet.addAnimation(rotateAnimation); imageView.startAnimation(animationSet); } } class AlphaAnimationListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); AlphaAnimation alphaAnimation=new AlphaAnimation(1,0); alphaAnimation.setDuration(1500); animationSet.addAnimation(alphaAnimation); imageView.startAnimation(animationSet); } } class TranslateAnimationListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); TranslateAnimation translateAnimation=new TranslateAnimation( Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,1.0f); translateAnimation.setDuration(1500); animationSet.addAnimation(translateAnimation); imageView.startAnimation(animationSet); } } class ScaleAnimationListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.1f,1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(1500); animationSet.addAnimation(scaleAnimation); imageView.startAnimation(animationSet); } } }
小总结:
代码比较简单,就不再一一的进行说明了。
在AnimationSet中可以添加多个Animtion,实现不同的动画效果的叠加。
对于AnimationSet的属性的设置可以全部映射到其内部的所有的动画中。
通过XML文件控制
大致的步骤如下:在res目录下创建一个anim的文件夹(名称不必拘泥于这一个)
在anim文件夹下创建一个xml文件(以set标签内嵌套alpha,rotate,scale,translate等子标签的方式设置动画效果)
然后在使用到动画效果的地方用相关代码进行添加即可。(稍后详述)
下面是我的一个动画文件示例分解:
如alpha.xml。简单明了清晰
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:startOffset="500" android:duration="1500" /> </set>
再看rotate.xml文件,其中pivotX属性的值分别代表着三种不同的情况(当然其他的属性值也是有这个情况滴)
android:pivotX=”60”;//绝对位置定位
android:pivotX=”60%”;//相对于控件自身的比例定位
android:pivotX=”60%p”;//相对于父控件的比例定位
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1500" /> </set>
再看translate.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="50%" android:fromYDelta="0%" android:toXDelta="0%" android:toYDelta="100" android:duration="1500" /> </set>
最后是scale.xml.
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1.0" android:fromYScale="1.0" android:toXScale="0.0" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="2000" /> </set>
完成了xml动画文件的设置,下一步当然是要进行使用了,否则要它做什么,我们可以使用下慢的代码来进行动画的使用。
Animation animation=(Animation) AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale); imageView.startAnimation(animation);
同样的,其他的动画也可以这么做。
偷偷的告诉你,可以在一个xml文件中同时设置好几个子标签,来完成好几个动画的叠加效果哦。(即如果想要共享一个Interpolator的话,需要将android:shareInterpolator的值设置为true)。至于什么是Interpalotor,就是android自带的一些动画的效果在这个安装目录下可以看到。
相关文章推荐
- Android学习之Animation(一)
- Android性能优化之如何避免Overdraw
- android Blur模糊效果
- Android中常见的坑有哪些?
- android实现首次启动引导
- Android 使用Canvas绘制饼图
- Android图片的缩放效果
- Android中的软引用(SoftRefrerence)和弱引用(WeakReference)
- 《Android源码设计模式解析与实战》读书笔记(二十二)
- Android界面设计的4种方式之四——开发自定义的View
- Android getSystemService用法实例总结
- Android开发Tips(2)
- Android学习笔记12:图像渲染(Shader)
- Android 事件传递 2
- Android 事件传递 1
- Android_Ant 编译相关资料整理
- android图像处理
- android Animation动画的xml使用
- android常用配色
- 2015年,从毕业到工作的几点感悟(Android开发新人)