Android OnTouch不会执行return命令

时间:2013-11-09 00:18:19

标签: java android intellij-idea ontouchlistener

这个问题让我陷入困境。我确定我做错了什么但我无法理解。

我有一个静态OnTouchListener,它附加到一个包含在linearlayout中的许多相同复合视图对象的TextView。这个监听器是一个帮助类。

    public static View.OnTouchListener getValueTouchListener() {
    return new View.OnTouchListener() {
        private int lastY;
        private int lastX;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            TextView view = (TextView)v;
            int action = event.getActionMasked();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    view.setBackgroundResource(R.drawable.cog_pressed);
                    lastY = (int)event.getY();
                    lastX = (int)event.getX();
                    return true;
                case MotionEvent.ACTION_MOVE:
                    //calc size of movement
                    int deltaY = lastY - (int)event.getY();
                    int deltaX = lastX - (int)event.getX();
                    // pass gesture up to parent if it's a big x movement - assumes user wishes to scroll parent
                    if (Math.abs(deltaX) > TOUCH_SLOP *2) {
                        return false;
                    }
                    lastX = (int)event.getX();
                    //process movement if larger than a touch slop
                    if (StrictMath.abs(deltaY) > TOUCH_SLOP) {
                        // reset last touch position
                        lastY = (int)event.getY();
                        //get direction of movement
                        int dir = (deltaY < 0)? -1 : 1;
                        //change index if within min and max limits
                        int min = (view.getTag() == Chainring.KEY)? Chainring.MIN_COG : Sprocket.MIN_COG;
                        int max = (view.getTag() == Chainring.KEY)? Chainring.MAX_COG : Sprocket.MAX_COG;
                        int value = Integer.valueOf(view.getText().toString());
                        if ((dir == -1 && value > min) || (dir == 1 && value < max)) {
                            value = value + dir;
                            view.setText(String.valueOf(value));
                            view.playSoundEffect(SoundEffectConstants.CLICK);
                        }
                    }
                    return true;
                case MotionEvent.ACTION_UP:
                    view.setBackgroundResource(R.drawable.cog_unpressed);
                    return true;
                case MotionEvent.ACTION_CANCEL:
                    view.setBackgroundResource(R.drawable.cog_unpressed);
                    return false;
                default:
                    return false;
            }
        }
    };
}

我在一个扩展线性布局的类

中将此侦听器连接到我的TextView
        mValueTextView.setOnTouchListener(CogPickerHelper.getValueTouchListener());

我的问题是该方法似乎没有在ACTION_DOWN,ACTION_UP和ACTION-MOVE情况下执行return命令。例如,使用ACTION_DOWN,代码执行到返回命令,但然后直接进入默认情况并返回false - 即使Logcat仍然将操作报告为ACTION-DOWN。

如果我尝试在返回命令上设置断点,IntelliJ会说:“在com.amb.GearBuddyV2.views.CogPickerHelper $ 2”的第X行找不到可执行代码

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码似乎工作正常,正确地返回 OnTouch 返回值。

是的,在return语句中添加一个break将导致调试器抱怨缺少可执行代码。