Android-动画
2015-07-12 12:57
363 查看
Android-动画
一 动画的分类
1,View Animation即Tween Animation补间动画
用于对象本身的变化例如:
Alpha透明度:Alpha Animation渐变动画
scale缩放大小:ScaleAnimation旋转动画
Translate位置移动:Translate Animation位移动画
rotate旋转:Trranslate Animation旋转动画
2 Drawable Animation即Frame Animation帧动画,用于对象之间的变化
3 Property Animation 属性动画,可以不用,上面两种即可,View Animation和ObjectAnimation
二 使用方法
1,创建动画
在xml中定义(官方建议方式)
通过代码动态实现
2,为View指定动画
mImageView.startAnimation(_scaleAnimation);
3,监控动画的执行状态
三 下面是一个综合Demo:
运行结果是点击四个不同的按钮,图片显示上面的四种不同的动画,
点击comples按钮,四种动画一起启动,分别用了xml方式和动态代码方式
主Activity类:
下面是4个动画的xml定义:
下面是一个动画集的xml:
一 动画的分类
1,View Animation即Tween Animation补间动画
用于对象本身的变化例如:
Alpha透明度:Alpha Animation渐变动画
scale缩放大小:ScaleAnimation旋转动画
Translate位置移动:Translate Animation位移动画
rotate旋转:Trranslate Animation旋转动画
2 Drawable Animation即Frame Animation帧动画,用于对象之间的变化
3 Property Animation 属性动画,可以不用,上面两种即可,View Animation和ObjectAnimation
二 使用方法
1,创建动画
在xml中定义(官方建议方式)
通过代码动态实现
2,为View指定动画
mImageView.startAnimation(_scaleAnimation);
3,监控动画的执行状态
//重写动画的监听函数,用于监听动画执行状态 _alphaAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationStart"); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationRepeat"); } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationEnd"); } }
三 下面是一个综合Demo:
运行结果是点击四个不同的按钮,图片显示上面的四种不同的动画,
点击comples按钮,四种动画一起启动,分别用了xml方式和动态代码方式
主Activity类:
主Activity类: public class MainActivity extends Activity { private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化图片对象 mImageView = (ImageView)findViewById(R.id.imageView1); //定义透明按钮,并设置点击事件 Button _buttonAlpha = (Button)findViewById(R.id.buttonAlpha); _buttonAlpha.setOnClickListener(new AnimationClickListener(AnimationType.Alpha)); //定义旋转按钮,并设置点击事件 Button _buttonRotate = (Button)findViewById(R.id.buttonRotate); _buttonRotate.setOnClickListener(new AnimationClickListener(AnimationType.Rotate)); //定义缩放按钮,并设置点击事件 Button _buttonScale = (Button)findViewById(R.id.buttonScale); _buttonScale.setOnClickListener(new AnimationClickListener(AnimationType.Scale)); //定义位移按钮,并设置点击事件 Button _buttonTranslate = (Button)findViewById(R.id.buttonTranslate); _buttonTranslate.setOnClickListener(new AnimationClickListener(AnimationType.Translate)); //定义复杂按钮,并设置点击事件 Button _buttonComplex = (Button)findViewById(R.id.buttonComplex); _buttonComplex.setOnClickListener(new AnimationClickListener(AnimationType.Complex)); } //动画枚举类 enum AnimationType { Alpha, Rotate, Scale, Translate, Complex } //实现的动画的事件监听类 class AnimationClickListener implements OnClickListener { private AnimationType mAnimationType; public AnimationClickListener(AnimationType p_AnimationType) { mAnimationType = p_AnimationType; } @Override public void onClick(View arg0) { // TODO Auto-generated method stub switch (mAnimationType) { case Alpha: //1,----------------动态编码方式----------------- /*//定义动画 AlphaAnimation _alphaAnimation = new AlphaAnimation(1f, 0.1f); _alphaAnimation.setDuration(3000); _alphaAnimation.setFillAfter(true); _alphaAnimation.setRepeatCount(5); _alphaAnimation.setRepeatMode(Animation.REVERSE); _alphaAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationStart"); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationRepeat"); } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationEnd"); } }); //启动动画 mImageView.startAnimation(_alphaAnimation); */ //2 --------------xml方式------------------- Animation _animationUtils = AnimationUtils.loadAnimation(MainActivity.this, R.anim.my_alpha_anim); mImageView.startAnimation(_animationUtils); break; case Rotate: //1,--------------动态编码方式-------------- /*//定义动画 RotateAnimation _rotateAnimation = new RotateAnimation (0, //起始度数 90, //旋转的度数 Animation.RELATIVE_TO_PARENT,//旋转中心的x坐标的参照物,是参照父布局,还是参照动画本身 0f, //x的值 Animation.RELATIVE_TO_PARENT, //旋转中心的y坐标的参照物,是参照父布局,还是参照动画本身 0f);//y的值 //RotateAnimation _rotateAnimation3 = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue) //设置动画重复次数 _rotateAnimation.setRepeatCount(3); //设置动画重复模式 _rotateAnimation.setRepeatMode(Animation.REVERSE); //设置动画的完成状态 _rotateAnimation.setFillAfter(true); //设置选装时间间隔 _rotateAnimation.setDuration(3000); //设置动画的监听事件 _rotateAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationStart"); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationRepeat"); } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub Log.i("chengzhi", "onAnimationEnd"); } }); //启动动画 mImageView.startAnimation(_rotateAnimation); break;*/ Animation _rotateAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.my_rotate_anim); mImageView.startAnimation(_rotateAnimation); break; case Scale: //1,--------------动态编码方式-------------- /*//定义动画 ScaleAnimation _scaleAnimation = new ScaleAnimation( 0, 2.0f, 0, 2.0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f); _scaleAnimation.setDuration(3000); //?s _scaleAnimation.setZAdjustment(10); _scaleAnimation.setRepeatCount(3); _scaleAnimation.setRepeatMode(Animation.REVERSE); //启动动画 mImageView.startAnimation(_scaleAnimation); */ //2 -----------xml方式-------------- Animation _scaleAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.my_scale_anim); mImageView.startAnimation(_scaleAnimation); break; case Translate: //1,--------------动态编码方式-------------- /*TranslateAnimation _translateAnimation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f); _translateAnimation.setDuration(3000); _translateAnimation.setRepeatCount(3); _translateAnimation.setRepeatMode(Animation.REVERSE); mImageView.startAnimation(_translateAnimation); */ //2 -----------xml方式-------------- Animation _translateAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.my_translate_anim); mImageView.startAnimation(_translateAnimation); break; case Complex: //1,--------------动态编码方式-------------- /* AlphaAnimation _alphaAnimation2 = new AlphaAnimation(1.0f, 0.1f); _alphaAnimation2.setRepeatCount(5); //_alphaAnimation2.setDuration(3000); ScaleAnimation _scaleAnimation2 = new ScaleAnimation (0, 2.0f, 0, 2.0f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0); _scaleAnimation2.setRepeatCount(5); //_scaleAnimation2.setDuration(3000); RotateAnimation _rotateAnimation2 = new RotateAnimation ( 0, 360, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0); _rotateAnimation2.setRepeatCount(5); //_rotateAnimation2.setDuration(3000); TranslateAnimation _translateAnimation2 = new TranslateAnimation (Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2f); _translateAnimation2.setRepeatCount(5); //_translateAnimation2.setDuration(3000); //设置动画集对象 AnimationSet _animationSet = new AnimationSet(true); _animationSet.setInterpolator(new AccelerateDecelerateInterpolator()); _animationSet.addAnimation(_translateAnimation2); _animationSet.addAnimation(_rotateAnimation2); _animationSet.addAnimation(_scaleAnimation2); _animationSet.addAnimation(_alphaAnimation2); _animationSet.setDuration(10000); mImageView.startAnimation(_animationSet);*/ //2 -----------xml方式-------------- Animation _setAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.my_anim_set); mImageView.startAnimation(_setAnimation); break; default: break; } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
下面是4个动画的xml定义:
<?xml version="1.0" encoding="utf-8"?> //变换的时间 <?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
下面是一个动画集的xml:
<?xml version="1.0" encoding="utf-8"?> //动画插入器设置为false,即不应用加速度等效果
相关文章推荐
- Android中观察者模式:消息分发器(MessageDispatcher)
- Android开源框架spots-dialog-master的使用
- Android中PopupWindow显示在指定位置
- Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)
- Android学习笔记一:Android基本组件和Activity生命周期
- iOS和Android的对比
- android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人
- Android自定义图形shape
- Android APK反编译就这么简单 详解(附图)
- Get Started——开发前的注意事项
- Android中加载的图片自动适应屏幕(新手)
- Android Fragment的标准写法
- Android实习02:"摇一摇"功能的实现
- Android 开发最佳实践
- Android Canvas绘图详解(图文)
- Android 系统状态栏一体化
- 解决android adb不能正确加载问题
- Android 中View的绘制机制源码分析 二
- Android实习01:SVN的基本使用方式
- android 定位