0

这个问题把我逼疯了。我确定我做错了什么,但我无法弄清楚。

我有一个静态 OnTouchListener,我将它附加到线性布局中包含的多个相同复合视图对象的 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 情况下执行返回命令。例如,使用 ACTION_DOWN,代码执行到返回命令,但随后直接进入默认情况并返回 false - 即使 Logcat 仍将操作报告为 ACTION-DOWN。

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

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

4

1 回答 1

0

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

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

于 2013-11-09T02:24:33.883 回答