Android 动画学习(二)
来源:互联网 发布:怎样将淘宝链接发微信 编辑:程序博客网 时间:2024/05/05 20:10
1、view group中控制子元素的出场效果
LayoutAnimation作用于view group,这样它de每一个子类就都会以指定的动画效果显现;使用步骤如下:
1、在res/anim/ 的路径下建立一个xml文件,跟view动画一样
/res/anim/layout_anim
<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="1" android:animationOrder="normal" android:animation="@anim/item_anim" />
/res/anim/item_anim
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration="1000" android:fromDegrees="180" android:toDegrees="360" /></set>
delay表示子元素的动画开始时间的延迟,具体延迟时间计算为:入场动画的时间周期*delay属性所设置的值;例如入场动画时间为100ms,delay值设置为1,则动画开始延迟了100ms。
animationOrder指的是子元素动画开始的顺序,normal表示的是按子元素顺序执行入场动画,除了normal的还有reverse和random,reverse是逆向显示,random是随机的顺序
animation指定了子元素的入场动画
设置完之后就可以直接在xml文件中或者代码中直接引用了,android:layoutAnimation="@anim/layout_anim"
对应的代码实现layoutanimation为一个叫做LayoutAnimationController的类来实现,示例代码如下:
Animation animation = AnimationUtils.loadAnimation(context, R.anim.item_anim); LayoutAnimationController controller = new LayoutAnimationController(animation);//在构造函数中指定子元素的动画效果 controller.setDelay(1); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); viewgroup.setLayoutAnimation(controller);
2、Activity 的切换效果
系统有为activity指定了默认的切换效果,和自定义view一样,只要你愿意也可以实现自己的动画切换效果;具体实现也很简单,只要重写activity的overiderPendingTransaition(int enterAnim, int exiting);方法就可以,enterAnim为activity进入时的动画资源id,exitAnim为activity退出时的动画资源 id;这个方法需要放在startActivity或者finish之后才会起作用。
3、android动画注意点
属性动画要求动画作用的对象提供属性的get和set方法,属性动画从外传入的该属性的初始值和最终值,以动画的效果多次调用该属性的set方法更新属性的值,随着时间的变化属性值逐渐发生变化而形成的动画效果,动画效果的显现最直接的就是UI的变化,因此要让属性动画生效需要有两个条件:
1、Object必须提供属性的set方法用于改变属性的值,在没有传递初始值的情况下还需要提供属性的get方法获取属性的初始值,如果既没有传递初始值又没有提供属性的get方法程序会崩溃
2、对象属性的设置了新的值之后会有UI上的改变,否则动画看不出效果
所以,如果动画对象没有提供get或者set方法或者set方法在UI上没有效果,则需要从另外的途径解决
1、把属性动画作用的对象封装成一个新的类,在类里面实现get和set方法
2、采用Value Animator 监听update过程,在updatelistener里面实现属性值的更新
例如:ObjectAnimator.ofInt(button, "width", 500).start();这样设置不会有动画效果,因为button的setWidth方法并不会改变button宽度
方法1来实现
private static class ViewWrapper {private View target;public ViewWrapper(View target) {this.target = target;}public void setWidth(int width) {target.getLayoutParams().width = width;}public int getWidth() {return target.getLayoutParams().width;}}ViewWrapper wrapper = new ViewWrapper(button)ObjectAnimator.ofInt(wrapper, "width", 500).start();
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 50); valueAnimator.setTarget(button); valueAnimator.setDuration(5000).start(); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { button.getLayoutParams().width = (int)valueAnimator.getAnimatedValue(); button.requestLayout(); } });
android 动画可能出现的问题
1、OOM:帧动画中如果引用了较多的图片或者图片较大时会出现OOM
2、内存泄漏:属性动画中的一种无限循环的动画需要在activity退出时停止,否则会导致activity无法释放造成内存泄漏
3、view动画的问题:view动画是对view的影像做动画,并不是真正改变view的状态,有时候会出现动画结束后setVisibility(View.gone)失效的问题,这时候调用view.clearAnimation()即可解决此问题
4、使用dp单位,使用px做单位在分辨率不同的设备上会有不同的动画效果
5、动画元素的交互:在将view移动之后,在android3.0之前不管是view动画还是属性动画,view在新位置上都无法接收点击事件,点击移动之前的位置则会触发view的点击事件,在android3.0以后属性动画的点击事件的触发位置为移动后的位置
0 0
- Android 动画学习(二)
- Android动画学习-视图动画&属性动画(二)
- Android 动画学习 二
- Android 动画学习(二)
- Android动画机制学习---animator(二)
- Android属性动画学习笔记(二)
- Android学习之动画(二)
- Android 动画学习记录(二)---frame动画
- android 学习随笔二十四(动画:帧动画)
- android 学习随笔二十五(动画:补间动画)
- android 学习随笔二十六(动画:属性动画)
- Android动画学习(二)之补间动画实现
- Android动画学习之帧动画二
- android动画学习(二)之属性动画
- Android 动画(二)
- Android动画学习总结(二)-------view animation
- android 学习随笔二十三(动画:Fragment )
- Android动画之属性动画(二)
- DAY6
- 谷歌招聘机制
- 生活散打
- makefile 学习笔记2
- MAC电脑安装Ubuntu的技巧
- Android 动画学习(二)
- [hdu 5533][2015ACM/ICPC亚洲区长春站] Dancing Stars on Me 计算几何
- OSG程序编译与开发过程中的问题(不断更新)
- 数据库字段数据(昵称)排序,规则: 数字>英文字母>汉字首字母 兼容简繁体排序
- opencl:慎用-cl-opt-disable选项编译kernel(可能会导致一些无法解释的问题)
- Linux下tomcat项目配置
- Cherish Your Time
- 啊哈!算法读书笔记 | 第一章 排序
- Redis资料记录