控件的Ontouch事件和onClick事件冲突

1、问题描述
今天在做Button的移动事件时遇到的一个问题,就是同时设置button的onTouch和onClick事件时,当我滑动提起的时执行了onClick事件,这是我不想要的,
2、解决方法:在onTouch的down和up事件记录一下时间,判断这个两个时间差来判断是否执行onClick事件:
if ((endTime - startTime) > 0.2 * 1000L) {
isclick = true;
} else {
isclick = false;
}
3、直接是上代码
// 按钮的拖动事件
private class MyTouchListener implements View.OnTouchListener {
int lastX, lastY; //记录移动的最后的位置
long startTime = 0;
long endTime = 0;
boolean isclick;

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                lastX = (int) event.getRawX();
                lastY = (int) event.getRawY();
                isclick = false;//当按下的时候设置isclick为false,具体原因看后边的讲解

                startTime = System.currentTimeMillis();
                break;
            case MotionEvent.ACTION_MOVE:
                //移动中动态设置位置
                isclick = true;//当按钮被移动的时候设置isclick为true
                int dx = (int) event.getRawX() - lastX;
                int dy = (int) event.getRawY() - lastY;
                int left = v.getLeft() + dx;
                int top = v.getTop() + dy;
                int right = v.getRight() + dx;
                int bottom = v.getBottom() + dy;
                if (left < 0) {
                    left = 0;
                    right = left + v.getWidth();
                }
                if (right > screenWidth) {
                    right = screenWidth;
                    left = right - v.getWidth();
                }
                if (top < 0) {
                    top = 0;
                    bottom = top + v.getHeight();
                }
                if (bottom > screenHeight) {
                    bottom = screenHeight;
                    top = bottom - v.getHeight();
                }
                v.layout(left, top, right, bottom);
                //将当前的位置再次设置
                lastX = (int) event.getRawX();
                lastY = (int) event.getRawY();
                break;
            case MotionEvent.ACTION_UP:
                endTime = System.currentTimeMillis();
                //当从点击到弹起小于半秒的时候,则判断为点击,如果超过则不响应点击事件

                if ((endTime - startTime) > 0.2 * 1000L) {
                    isclick = true;
                } else {
                    isclick = false;
                }
                break;
        }
        return isclick;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值