本文章,是照着例子做,一边学习一边做的。给自己一份信心
一、属性动画Animator
操作view的属性进行移动,能够解决一般动画的一些局限性,如,
TranslateAnimation移动view之后,该view的一些事件处理还停留在原地,没有更随view进行移动,如下面这个例子.
public void bClick(View view) {imageView = (ImageView) findViewById(R.id.iv);//首先采用一般动画TranslateAnimation translate = new TranslateAnimation(0, 200, 0, 0);translate.setDuration(1000); //设置动画时间translate.setFillAfter(true); //位置更随移动imageView.startAnimation(translate);}
图片例子如下
所以需要使用属性动画,来处理一般动画不能解决的问题。
二、属性动画ObjectAnimator的使用
第一种方式:(
translationX,
translationY ,
rotation
)
ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F).setDuration(1000).start();//y轴从0移动到200的ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F).setDuration(1000).start();//从0旋转到360度ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F).setDuration(1000).start();
第二种方式:
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX", 0F, 200F);PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY", 0F, 200F);PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation", 0F, 360F);ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3).setDuration(1000).start();
第三种方式:属性的集合动画
//第三种属性动画,集合使用,提供了更方便的动画控制效果AnimatorSet set = new AnimatorSet();ObjectAnimator obj1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F);ObjectAnimator obj2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F);ObjectAnimator obj3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);// set.playTogether(obj1, obj2, obj3); //三种属性动画一起移动// set.start();// set.playSequentially(obj1, obj2, obj3); //三种属性动画,按照顺序执行// set.start();set.play(obj1).with(obj2); //obj1和obj2一起移动set.play(obj3).after(obj1); //obj3在obj1之后执行set.start();
三、属性动画的监听
//第三种属性动画,集合使用,提供了更方便的动画控制效果AnimatorSet set = new AnimatorSet();ObjectAnimator obj1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F);ObjectAnimator obj2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F);ObjectAnimator obj3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);// set.playTogether(obj1, obj2, obj3); //三种属性动画一起移动// set.start();// set.playSequentially(obj1, obj2, obj3); //三种属性动画,按照顺序执行// set.start();set.play(obj1).with(obj2); //obj1和obj2一起移动set.play(obj3).after(obj1); //obj3在obj1之后执行set.start();set.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animator animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animator animation) {Toast.makeText(MainActivity.this, "结束", Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationCancel(Animator animation) {// TODO Auto-generated method stub}});set.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {Toast.makeText(MainActivity.this, "结束", Toast.LENGTH_SHORT).show();}});
实现一个扇形弹出菜单的动画效果
四、数值动画(ValueAnimator)
/*** 数值发生器ValueAnimator** @param view*/public void valueClick(View view) {final Button button = (Button) view;// 设置数值ValueAnimator animator = ValueAnimator.ofInt(0, 100);animator.setDuration(5000);// 监听ValueAnimator变化animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 获取传递的数值Integer value = (Integer) animation.getAnimatedValue();button.setText("" + value);}});animator.start();}
总结:执行效率更高,更好
如果一个属性提供了get和set方法,那么我们就可以通过属性动画去掉用这个属性。实现动画效果
常用属性总结:
. translationX\translationY
. rotation、rotationX\rotationY
. scaleX\scaleY (x和y轴方向上的一个缩放动画)
. x\y (具体会移动某一个点)
. apha (透明度)
常用方法、和类
. ValueAnimator 数值发生器,可以很灵活的使用
. ObjectAnimator 封装了ValueAnimator更方便的使用
. AnimatorUpdateListener
. AnimatorListenerAdapter
. PorpertyValuesHolder
. AnimatorSet
. TypeEvaluators 值计算器
. Interpolators 差值计算器
差值器:
本文详细介绍了属性动画与数位动画在Android开发中的使用方法,包括如何利用ObjectAnimator、PropertyValuesHolder、AnimatorSet等工具实现复杂的动画效果,并探讨了属性动画的监听机制与数位动画的应用场景。同时,文中还提供了一个实现扇形弹出菜单动画的实例,展示了动画在UI交互设计中的重要性。
9635

被折叠的 条评论
为什么被折叠?



