高级动画在android2.X版本上的应用
2016-01-19 21:15
369 查看
大家都知道,所谓的传统动画是指Tween动画和Frame动画,而高级动画指ValueAnimator和ObjectAnimator。
这里就一个点来讲,传统动画和高级动画都可以将View进行移动,但是有何区别呢?区别就在于:传统动画只是完成了移动的效果,但是View本身是还在原处;高级动画则是移动完成之后,View本身也随之移动,这时可以触发View的各种事件。
在2.X版本应用高级动画,需要在项目中导入nineoldandroids-2.4.0这个jar包。
情景:OK,我们设置一个button,点击之后使view移动。观察移动后的view是否能触发点击事件
关键代码:
弯路走到头了!这里需要使用这个方法,view.layout(int l, int t, int r, int b)。这个方法设置的是view在其父容器中的偏移量,能够移动view,并且移动view的各种事件。
这里就一个点来讲,传统动画和高级动画都可以将View进行移动,但是有何区别呢?区别就在于:传统动画只是完成了移动的效果,但是View本身是还在原处;高级动画则是移动完成之后,View本身也随之移动,这时可以触发View的各种事件。
在2.X版本应用高级动画,需要在项目中导入nineoldandroids-2.4.0这个jar包。
情景:OK,我们设置一个button,点击之后使view移动。观察移动后的view是否能触发点击事件
关键代码:
//让view横向移动300px ValueAnimator va = ValueAnimator.ofInt(0,300); va.setDuration(1000); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int i = (int) valueAnimator.getAnimatedValue(); // view.setTranslationX(i); ViewHelper.setX(view,i); } }); va.start();注意:view.setTranslationX()这个方法必须在API11以上才能使用。这里需要使用到nineoldandroids里的方法——ViewHelper.setX(View view, float x)。然而这种移动方式并未把view本身给移动过来,所以在移动后的view的区域不具备点击事件,它的点击事件仍然停留在未移动前的位置。这样显然不符我们所想。
弯路走到头了!这里需要使用这个方法,view.layout(int l, int t, int r, int b)。这个方法设置的是view在其父容器中的偏移量,能够移动view,并且移动view的各种事件。
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int i = (int) valueAnimator.getAnimatedValue(); // view.setTranslationX(i); // ViewHelper.setX(view,i); int top = view.getTop(); view.layout(i,top,i+view.getWidth(),top+view.getHeight()); } });运行可以看到,在移动后的view上也可以触发它的点击事件。
相关文章推荐
- android输入法属性使用,软键盘隐藏、显示状态控制大揭秘
- android Paint 和Canvas的简单使用
- 安卓SDK资源镜像地址,不用翻墙
- android获取view宽高的几种方法 - ysl_longer
- ActiveAndroid 简单方便的ORM(对象关系映射)
- android 源码剖析之------Window的内部实现机制(添加、删除、更新)
- U盘启动android 5.0
- #ApiDemos#view之Animation
- android studio 导入.so文件
- Android SDK Manage 代理设置
- Android Studio 快捷键
- Android开源项目总结
- Androidx学习笔记(10)-- 文件读写操作简介
- Androidx学习笔记(9)-- logcat
- Android 平板应用隐藏状态栏和底下的导航栏(navigation bar)
- android 4.0.3 设置时间无法更新到RTC
- Android Studio导入GitHub第一个项目PullToRefresh
- Androidx学习笔记(8)--常见布局--帧布局
- Android使用fragment切换,界面间传值操作
- Android Studio 插件简介