Button的OnTOuchListener()与OnClickListener()冲突的问题解决

最近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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值