2

タッチ リリースをリッスンしようとしていますが、イベントが発生していません。

これは私のコードです:

public class MyView extends View {
    public MyView(final Context context) {
        super(context);
        setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {
                if (e.getAction() == MotionEvent.ACTION_DOWN) {
                    makeToast("press", context);
                } else if (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL) {
                    makeToast("release", context);
                }

                return false;
            }
        });
    }

    void makeToast(String s, Context c) {
        CharSequence text = s;
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(c, text, duration);
        toast.show();
    }

}

活動クラス:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView v = new MyView(getApplicationContext());
        setContentView(v);
    }
}

画面に触れると「プレス」と書かれたトーストが表示されますが、タッチを離してもトーストは表示されませんが、「リリース」と書かれたトーストが表示されることを期待しています。

私は何が欠けていますか?

4

1 に答える 1

3

onTouchListener 内で false ではなく true を返す必要があります。

何が起こるかというと、Action Down が最初にトリガーされましたが、Action Down が処理されなかったことを意味する false を返しました。

true を返すと、キャッチした各アクションが完全に処理されることが保証されます。代わりにアクションを処理するために必要な他のビューがわかっている場合にのみ、false を返します。

幸運を!

于 2013-11-06T21:06:32.953 に答える