Android笔记之属性动画
来源:互联网 发布:java jre1.6 32位下载 编辑:程序博客网 时间:2024/06/10 09:10
Anroid属性动画与传统动画相比,可以说是强大的改进。属性动画顾名思义,就是改变图片属性,例如为一张图片设置点击事件,并加上平移动画,如果是用传统动画,点击平移后的动画,不会产生点击效果,而点击动画原位置,却会产生点击效果!因为图片固有属性没变,你所加的动画只不过是表面“障眼法”,其实图片仍在原位置,这时如果想实现图片点击事件,就会比较麻烦,可以把图片设置在动画后的位置隐藏,设置传统动画后图片显示,这样点击事件就会产生。
有点跑题了,继续说属性动画,如果用属性动画设置点击事件,不管图片移动到哪里,动画点击效果仍然存在,因为图片固有属性改变了。
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笔记之属性动画
- Android笔记之属性动画
- Android开发笔记之属性动画解析
- Android开发笔记之属性动画
- Android笔记----动画、属性动画
- 笔记之android动画 初识ValueAnimator 属性动画
- Android 动画之属性动画
- Android动画之属性动画
- Android动画之属性动画
- android 动画 之 属性动画
- Android动画之---属性动画
- Android动画之属性动画
- Android 动画之属性动画
- Android动画之属性动画
- Android动画之属性动画
- Android动画之属性动画
- Android动画之属性动画
- Android动画之属性动画
- 《Linux操作系统编译构建指南》
- 相对布局RelativeLayout详解
- OpenJudge百炼习题解答(C++)--题4040:买书问题
- Apache CXF 框架结构和基本原理
- 堆排序-java
- Android笔记之属性动画
- 关于c++浮点数的数字个数setprecision(n)与setiosflags(ios::fixed)
- 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
- JavaWeb----Struts2
- eclipse ant jacoco
- 生命之树
- cordova 实现第三方登录及分享,qq,微信,微博,插件的使用和改动
- Perl变量作用域
- linux makefile详解?