最近UI需要实现一个动画效果,button按下的时候缩小,松手的时候还原,但是点击事件依然生效。我琢磨了半天,感觉给这个button写个触摸事件,
add = (Button) findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("dd", "onClick 点击了添加");
}
});
add.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
//按下操作
if (event.getAction() == MotionEvent.ACTION_DOWN) {
AnimatorSet set = new AnimatorSet();//组合动画
ObjectAnimator scaleX = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 0.8f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 0.8f);
set.setDuration(180);
set.setInterpolator(new DecelerateInterpolator());
set.play(scaleX).with(scaleY);//两个动画同时开始
set.start();
}
//抬起操作
if (event.getAction() == MotionEvent.ACTION_UP) {
AnimatorSet set1 = new AnimatorSet();//组合动画
ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 1.0f);
ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 1.0f);
set1.setDuration(180);
set1.setInterpolator(new DecelerateInterpolator());
set1.play(scaleX1).with(scaleY1);//两个动画同时开始
set1.start();
}
//移动操作
if (event.getAction() == MotionEvent.ACTION_MOVE) {
}
return true;//改为return false OnClickListener()才会生效
}
});
运行了一下,发现onClickListener()没有执行,原因是因为返回值为True,在android view事件分发机制中,onTouchListener()>onTouchEvent()>OnClickListener(),如果OnTouchListener()的返回值为True,则表示消耗此事件,不会往下传递,如果我们想要实现OnClickListener(),需要把return true 改为 false;