onTouchListener不接受布局

时间:2018-10-18 10:14:18

标签: java android xml android-studio android-layout

代码

private RelativeLayout mToolbar;
mToolbar = (RelativeLayout) myview.findViewById(R.id.toolbar);

mToolbar.setOnTouchListener(new View.OnTouchListener() {
        WindowManager.LayoutParams updatedParameters = finalParameters;
        double x;
        double y;
        double pressedX;
        double pressedY;

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

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:

                    x = updatedParameters.x;
                    y = updatedParameters.y;

                    pressedX = event.getRawX();
                    pressedY = event.getRawY();

                    break;

                case MotionEvent.ACTION_MOVE:
                    updatedParameters.x = (int) (x + (event.getRawX() - pressedX));
                    updatedParameters.y = (int) (y + (event.getRawY() - pressedY));

                    wm.updateViewLayout(myview, updatedParameters);

                default:
                    break;
            }

            return false;
        }
    });

我有一个服务,上面的代码可以在屏幕上移动该服务...它在我必须触摸一个按钮并将其移动之前起作用。我现在将其切换为布局,它不再起作用了 为什么不起作用?相同的代码我用一个按钮代替它,并且工作正常。是onTouch始终必须是按钮,还是必须是布局或文本视图?

2 个答案:

答案 0 :(得分:2)

您应该从onTouch方法返回true

如果您在获得false后返回MotionEvent.ACTION_DOWN, Android假定您对处理触摸事件不感兴趣,并且根本不向您传递任何其他运动事件(包括您期望的MotionEvent.ACTION_MOVE

答案 1 :(得分:0)

您需要更新onTouch方法的返回部分

  public boolean onTouch(View v, MotionEvent event) {
    // if return is true means touch enabled
    // If return is false means touch is disabled
    return true;
    }