Android笔记之属性动画
2016-02-22 20:40
381 查看
Anroid属性动画与传统动画相比,可以说是强大的改进。属性动画顾名思义,就是改变图片属性,例如为一张图片设置点击事件,并加上平移动画,如果是用传统动画,点击平移后的动画,不会产生点击效果,而点击动画原位置,却会产生点击效果!因为图片固有属性没变,你所加的动画只不过是表面“障眼法”,其实图片仍在原位置,这时如果想实现图片点击事件,就会比较麻烦,可以把图片设置在动画后的位置隐藏,设置传统动画后图片显示,这样点击事件就会产生。
有点跑题了,继续说属性动画,如果用属性动画设置点击事件,不管图片移动到哪里,动画点击效果仍然存在,因为图片固有属性改变了。
Animator-属性动画:
1、ObjectAnimator:
别忘了ImageView imageView = (ImageView) findViewById(R.id.imageView);
下面这段代码比较适合单个动画效果设置,下面动画叠加比较占用系统资源。
这段代码比较适合动画效果叠加设置
动画顺序播放
上面的顺序播放还有另一种方法像这样
set.play(o1).with(o3);
set.play(o1).after(o2);
这种方法可以设置动画叠加顺序等等等,
这些动画实现代码与传统动画比较类似就不多说了
动画监听事件–注释掉的部分是可以监听的所有:开始、结束、重复什么的。。。
2、ValueAnimator
看看ObjectAnimator源代码你会发现其实ObjectAnimator主要是ValueAnimator实现的,也就是说通过ValueAnimator可以实现超过ObjectAnimator动画更多的效果。认真研究ObjectAnimator源代码,你可以通过ValueAnimator实现更为丰富意想不到的效果,这就看你的功底、想象力和审美了!
下面这段代码可以实现一个简单的Button计时器效果,点击后在5秒内,从0计时到100.这只是最最简单的小例子,ValueAnimator有多强大用了就知道。
有点跑题了,继续说属性动画,如果用属性动画设置点击事件,不管图片移动到哪里,动画点击效果仍然存在,因为图片固有属性改变了。
Animator-属性动画:
1、ObjectAnimator:
别忘了ImageView imageView = (ImageView) findViewById(R.id.imageView);
下面这段代码比较适合单个动画效果设置,下面动画叠加比较占用系统资源。
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation", 0, 360F); PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("alpha", 1.0F, 0.5F); PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY", 0, 200F); ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3) .setDuration(1000).start();
这段代码比较适合动画效果叠加设置
// 这个方法较好 ObjectAnimator o1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F); ObjectAnimator o2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F); ObjectAnimator o3 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F); AnimatorSet set = new AnimatorSet(); set.playTogether(o1, o2, o3); set.setDuration(1000); set.start();
动画顺序播放
ImageView imageView = (ImageView) findViewById(R.id.imageView); ObjectAnimator o1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F); ObjectAnimator o2 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F); ObjectAnimator o3 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F); AnimatorSet set = new AnimatorSet(); set.playSequentially(o3, o2, o1); set.setDuration(1000); set.start();
上面的顺序播放还有另一种方法像这样
set.play(o1).with(o3);
set.play(o1).after(o2);
这种方法可以设置动画叠加顺序等等等,
这些动画实现代码与传统动画比较类似就不多说了
动画监听事件–注释掉的部分是可以监听的所有:开始、结束、重复什么的。。。
animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub super.onAnimationEnd(animation); Toast.makeText(AnimatorDemo.this, "动画结束", Toast.LENGTH_SHORT) .show(); } }); // animator.addListener(new AnimatorListener() { // // @Override // public void onAnimationStart(Animator animation) { // // } // // @Override // public void onAnimationRepeat(Animator animation) { // // TODO Auto-generated method stub // // } // // @Override // public void onAnimationEnd(Animator animation) { // Toast.makeText(Animotator.this, "动画结束", Toast.LENGTH_SHORT) // .show(); // // } // // @Override // public void onAnimationCancel(Animator animation) { // // TODO Auto-generated method stub // // } // }); animator.start();
2、ValueAnimator
看看ObjectAnimator源代码你会发现其实ObjectAnimator主要是ValueAnimator实现的,也就是说通过ValueAnimator可以实现超过ObjectAnimator动画更多的效果。认真研究ObjectAnimator源代码,你可以通过ValueAnimator实现更为丰富意想不到的效果,这就看你的功底、想象力和审美了!
下面这段代码可以实现一个简单的Button计时器效果,点击后在5秒内,从0计时到100.这只是最最简单的小例子,ValueAnimator有多强大用了就知道。
final Button button = (View) findViewById(R.id.button2); // ValueAnimator ValueAnimator animator = ValueAnimator.ofInt(0, 100); animator.setDuration(5000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { integer value = (integer) animation.getAnimatedValue(); button.setText("" + value); } }); animator.start();
相关文章推荐
- Android中使EditText失去焦点,edittext禁止弹出键盘
- 转行自学android,Day3-卡壳
- 【转】推荐一个Android组件群,感觉棒棒哒!!!
- android_demo01
- Android项目旋转屏幕数据丢失的原因及解决
- Android消息推送(主: XMPP协议实现Android推送)
- android事件传递机制
- Android常用界面布局
- <转>Android ORM 框架子 greenDao 使用心得
- Android抓取正方系统课程——实现自己的课程表
- Android 启动时间优化 <22>
- android开发 框架
- 【转载】Android Studio 使用AIDL
- android Viewpage 无限循环播放
- 高德地图定位源码
- android 自定义RadioButton样式
- New Activity探索(一):EmptyActivity
- Android进阶之ListView与BaseAdapter的使用
- Android 可控制概率家务转盘
- Android onLowMemory()和onTrimMemory(...)调整运行过程中的内存消耗 <21>