使用属性动画(Animator)来完成动画

一直以来,完成动画的时候都使用的是AniamtionSet,把所有的动画放在一个集合中,这就是传统的动画,但是这存在有很大的弊端,例如下边一段代码,布局文件分别由一个IamgeView和一个Button组成,对Button和ImageVew添加如下监听事件:

 1 @Override

 2     public void onClick(View view) {

 3         // TODO Auto-generated method stub

 4         switch (view.getId()) {

 5         //对ImageView添加监听

 6         case R.id.img:

 7             Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();

 8             break;

 9         //对按钮添加监听,是ImageView沿XY轴对角线向下平移180个像素

10         case R.id.btn_move:

11         {

12             TranslateAnimation trans = new TranslateAnimation(0,180,0,180);

13             trans.setDuration(1000);

14             trans.setFillAfter(true);;  

15             img.startAnimation(trans);

16         }

17     }

 当程序运行完后,你会发现一个奇怪的现象:

使用属性动画(Animator)来完成动画       使用属性动画(Animator)来完成动画

当你去点击图片的原始位置时,即时图片已经移动走了,但是你点击图片原来的空白位置,仍然会触发ImageView的点击事件,而你去点击移动后的这张图片,他却不会触发ImageView的点击事件。

所以说,使用传统 的动画存在一定的弊端,下面对属性动画简单的进行使用。

1 ObjectAnimator.ofFloat(img, "translationY", 0F,180F).setDuration(1000).start();

2 ObjectAnimator.ofFloat(img, "translationX", 0F,180F).setDuration(1000).start();

使用ObjectAnimator来对动画进行控制的时候,只需要调用ofFloat()就可以了,这个方法的参数分别代表:

* 1、要操作的对象
* 2、要操作对象的属性
* 3、动画变化的范围

将对Button的监听改为以上代码后,就不会出现上述奇怪的现象了,就会实现“指哪打哪”的效果了。

 

 

 

 不积跬步,无以至千里;不积小流,无以成江海

你可能感兴趣的:(mat)