当前位置:   article > 正文

Button的OnTOuchListener()与OnClickListener()冲突的问题解决_android setonclicklistener和 setontouchlistener冲突

android setonclicklistener和 setontouchlistener冲突

最近UI需要实现一个动画效果,button按下的时候缩小,松手的时候还原,但是点击事件依然生效。我琢磨了半天,感觉给这个button写个触摸事件,

  1. add = (Button) findViewById(R.id.add);
  2. add.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View view) {
  5. Log.e("dd", "onClick 点击了添加");
  6. }
  7. });
  8. add.setOnTouchListener(new View.OnTouchListener() {
  9. @Override
  10. public boolean onTouch(View view, MotionEvent event) {
  11. //按下操作
  12. if (event.getAction() == MotionEvent.ACTION_DOWN) {
  13. AnimatorSet set = new AnimatorSet();//组合动画
  14. ObjectAnimator scaleX = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 0.8f);
  15. ObjectAnimator scaleY = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 0.8f);
  16. set.setDuration(180);
  17. set.setInterpolator(new DecelerateInterpolator());
  18. set.play(scaleX).with(scaleY);//两个动画同时开始
  19. set.start();
  20. }
  21. //抬起操作
  22. if (event.getAction() == MotionEvent.ACTION_UP) {
  23. AnimatorSet set1 = new AnimatorSet();//组合动画
  24. ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 1.0f);
  25. ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 1.0f);
  26. set1.setDuration(180);
  27. set1.setInterpolator(new DecelerateInterpolator());
  28. set1.play(scaleX1).with(scaleY1);//两个动画同时开始
  29. set1.start();
  30. }
  31. //移动操作
  32. if (event.getAction() == MotionEvent.ACTION_MOVE) {
  33. }
  34. return true;//改为return false OnClickListener()才会生效
  35. }
  36. });
运行了一下,发现onClickListener()没有执行,原因是因为返回值为True,在android  view事件分发机制中,onTouchListener()>onTouchEvent()>OnClickListener(),如果OnTouchListener()的返回值为True,则表示消耗此事件,不会往下传递,如果我们想要实现OnClickListener(),需要把return true 改为 false;
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号