Android Animation总结
2013-11-14 00:10
447 查看
一、动画分类
1. View Animation :alpha 透明渐变 , Scale 缩放 、translate 位移, rotate 旋转
继承Animation,自己重写一个动画
2. Drawable Animation:
3. Property Animation : ViewAnimator, ObjectAnimator
4. LayoutAnimationController 布局动画
1. View Animation (Tween动画)
执行一系列简单的转换。
针对视图对象内容进行移动,放大,缩小以及产生透明度的变化等四种动画操作。仅针对视图对象内容:
例如:有一个TextView仅能针对文字进行四种动画操作。
例如:有一个ImageView仅能针对背景进行四种动画操作。
更多可参考文档:
http://developer.android.com/guide/topics/graphics/view-animation.html
2. Drawable Animation (Frame动画)
传统的动画方法,通过顺序的播放排列好的图片来实现。
某种意义上说像一个胶卷,它是创建一系列不同的对象,按顺序播放。基类是AnimationDrawable
不能再onCreate中调用start方法,因为AnimationDrawable尚未完全附加到窗口上。如果你想立即播放动画,而无需互动,那么你可能想在您的活动onWindowFocusChanged()方法,当Android有焦点时调用它。
更多可参考文档
http://developer.android.com/guide/topics/graphics/drawable-animation.html
3.Property Animation
Android 11 (3.0)以上才支持,看很多介绍时可以改变视图的属性,但是支持视图外所有对象的动画变换,但是未发现如何修改视图属性的。
ViewPropertyAnimator
interpolator
二、Property Animation与View Aimation区别?
1. View动画只支持4种属性,单独改变视图的宽高无法实现。2. View动画仅修改绘制位置等,但是点击事件的位置不会变,导致点击错位。
3. View动画比属性动画代码量少,如果前者可以满足需求,不需要使用属性动画。
4. 属性动画可以直接修改View的属性值。
三、View Animation原理
1. 创建Animation2. invalidate
3. drawChild、onDraw
4. getTransformation
两种模式:
独占:用主线程画,不能有其他操作
中断:每次都执行invalidate
四、Property Animation原理
View Animation 与 DrawableAnimation仅重新绘制,即使使用位移动画显示位置发生改变,其实视图的位置为发生改变。分别是位置,大小,角度由Matrix 进行3*3的矩阵变换,、透明度Alpha负责。
代码和xml配置两种
参考资料:
Android中图像变换Matrix的原理、代码验证和应用(一) 共有3篇
分析android动画模块
Android 动画框架详解,第 1 部分 、 Android 动画框架详解,第 2 部分
Property Animation - 实解
Animation Resources
android动画(一)Interpolator
计算公式生成图像
http://www.wolframalpha.com/
关于android的animation的xml定义中的android:interpolator属性的含义
动画完整介绍
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
分析android动画模块 非常优秀
View Animation 例子:移动动画效果图
三、移动动画源码
private ImageView mImageView; private TranslateAnimation mTranslateLeft; private TranslateAnimation mTranslateRight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 供移动ImageView mImageView = (ImageView) findViewById(R.id.imageview); // 两个按钮 Button leftButton = (Button) findViewById(R.id.left_button); leftButton.setOnClickListener(this); Button rightButton = (Button) findViewById(R.id.right_button); rightButton.setOnClickListener(this); // 指定移动位置 mTranslateRight = new TranslateAnimation(0, 100, 0, 100); // 设置动画时间,单位是毫秒 mTranslateRight.setDuration(1000); // 添加此开关,之后才有效 mTranslateRight.setFillEnabled(true); // 指动画结束时画面停留在此动画的第一帧 mTranslateRight.setFillBefore(true); mTranslateLeft = new TranslateAnimation(100, 0, 100, 0); mTranslateLeft.setDuration(1000); mTranslateLeft.setFillEnabled(true); // 指动画结束时画面停留在此动画的最后一帧 mTranslateLeft.setFillAfter(true); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.left_button: // 启动方式1 mImageView.setAnimation(mTranslateRight); mTranslateRight.startNow(); break; case R.id.right_button: // 启动方式2 mImageView.startAnimation(mTranslateLeft); break; } }
三、动画框架NineOldAnimation使用总结
1. 不需要判断Andorid API版本,直接使用nine old API
2. AndroidSet.setDuration无效,必须针对每一个Animator设置才有效
3. 关闭动画 - 不能使用View.clearAnimation() ,需要使用Animation.cancel();
4. 动画结束 - end监听中先cancel自己,可能会出现反复执行。动画执行结束后,如果使用监听,记得自己清理自己。AnimationSet 记得使用完后自己清理,并且恢复到初始状态。
5. 被动关闭 - 切换Activity会直接停止,所以停止时记得还原动画还原为初始状态。
6. 动画硬件加速:HTC G12 崩溃 (2.3系统)
2015-10-30 内容修改
相关文章推荐
- Android的 animation (总结)
- Android Animation学习总结
- Android动画学习Demo(1) 关于ViewAnimation的用法及总结
- Android画图学习总结(四)——Animation(上)
- Android中Animation的使用总结
- Android总结之Animation
- Android画图学习总结(四)——Animation(中)
- Android画图学习总结(四)——Animation(中)
- Android画图学习总结(四)——Animation(中)
- Android帧动画(Drawable Animation)的使用总结
- Android画图学习总结(四)——Animation(中)
- android开发动画总结一(tweened animation)
- Android画图学习总结(四)——Animation(上)
- Android画图学习总结(四)——Animation(上)
- Android画图学习总结(四)——Animation(中)
- Android画图学习总结(四)——Animation(中)
- Android画图学习总结(四)——Animation(下)
- Android画图学习总结(四)——Animation(下)
- Android画图学习总结(四)——Animation(下)
- Android画图学习总结(四)——Animation(下)