0

この問題は私を壁に追いやっています。私は何か間違ったことをしていると確信していますが、それを理解することはできません。

線形レイアウト内に含まれる多数の同一の複合ビュー オブジェクトの TextView にアタッチする静的な OnTouchListener があります。このリスナーはヘルパー クラスにあります。

    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 の場合、コードは return コマンドまで実行されますが、その後、デフォルトのケースに直接進み、false を返します。Logcat はアクションを ACTION-DOWN として報告しますが。

戻りコマンドにブレークポイントを設定しようとすると、IntelliJ は「クラス com.amb.GearBuddyV2.views.CogPickerHelper$2 の行 X に実行可能コードが見つかりません」

ここで私が間違っていることを誰かが知っていますか?

4

1 に答える 1

0

あなたのコードは正常に動作しているようです。OnTouchの戻り値は正しく返されています。

そうです、return ステートメントにブレークを追加すると、デバッガーは実行可能コードが見つからないと文句を言うようになります。

于 2013-11-09T02:24:33.883 に答える