【问题标题】:Android button onTouchListener firing outside boundsAndroid按钮onTouchListener在边界外触发
【发布时间】:2016-07-30 15:25:27
【问题描述】:

当我将手指按在按钮上然后将其移出按钮边界时,onTouchListener 会继续触发。

当我将一根手指按在按钮上,另一根手指按在按钮外时,也会发生同样的情况:我的onTouchListener 会触发第二根手指。

如何避免这种情况?我只想在我按下按钮的范围内时触发我的onTouchListener

这是我的onTouchListener 实现

View.OnTouchListener onTouchListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (fingerDown) {
            xHistoricalFirstFinger = (int) event.getX();
            yHistoricalFirstFinger = (int) event.getY();
            xFirstClick = xHistoricalFirstFinger;
            yFirstClick = yHistoricalFirstFinger;
            //counter++;
            fingerDown = false;
        }
        x = (int) event.getX();
        y = (int) event.getY();

        Log.v("Touched", client.remoteAdress.toString());

        mouseMoveProvider.nextX = x - xHistoricalFirstFinger;
        mouseMoveProvider.nextY = y - yHistoricalFirstFinger;
        mouseMoveProvider.Ready = true;
        xHistoricalFirstFinger = x;
        yHistoricalFirstFinger = y;

        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (x - xFirstClick == 0 & y - yFirstClick == 0) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            client.MakeMove();
                        } catch (IOException e) {
                            e.printStackTrace();
                            NetworkListener.HandleNetworkIsUreachableException(context);
                        }
                    }
                }).start();
            }

            fingerDown = true;

        }
        return true;
    }
};

【问题讨论】:

  • 分享你的触摸监听器实现。有什么理由不使用点击监听器?
  • 不,我只需要触摸监听器

标签: android


【解决方案1】:

我认为这可能对您有所帮助:

User touch and drags out of button region

基本上,您还需要检查 ACTION_MOVE 并查看触摸是否已离开矩形的边界。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用onClickListener?

    onTouchListener 将在每次触摸时触发(手指向下,手指向上...)

    【讨论】:

    • 我只需要触摸监听器,它只在按钮范围内触发
    • 我认为您可以检查触摸事件坐标是否在视图内。还没有这样做,但只看文档,你可以做v.getDrawingRect().contains(event.getX(), event.getY()) 这将检查触摸事件坐标是否在视图矩形内 - 返回布尔值。
    • 我一直在考虑,但是您的方法是一种解决方法,不是吗?是否存在更优雅的解决方案?
    • 我不认为这是解决方法,onTouchListener 就是这样工作的,一行代码非常优雅。我能想到的唯一“更优雅”的解决方案是onClickListener:D
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多