web-dev-qa-db-ja.com

ビューのonTouchListenerとonTouchEvent

ビューのonTouchEventの違いは何ですか:

public class MyCustomView extends View {
    // THIS :
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}

とそのonTouchListener

MyCustomView myView = (MyCustomView) findViewById(R.id.customview);
myView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public void onClick(View arg0) {
        // do something
    }
});

または

public class MyCustomView extends View {

    public MyCustomView(Context context, AttributeSet attrs) {
        // THIS :
        setOnTouchListener(new View.OnTouchListener() {
            @Override
            public void onClick(View arg0) {
                // do something
            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}

この2つが異なる場合、
両方を実装する必要がありますか?
最初に呼び出されるのはどれですか?

スクロール機能とズーム機能がある場合、それらをonTouchEventまたはonTouchListener内に実装する必要がありますか?

14
topher

LeeYiHongによる回答は正しいですが、他の非常に重要なことは、 http://developer.Android.com/reference/Android/view/View.OnTouchListener.html に書かれていることです。

コールバック[i.e. View.OnTouchListener -> onTouch(View v, MotionEvent event)]は、タッチイベント[i.e. onTouchEvent(MotionEvent)]がビューに渡される前に呼び出されます。

11
Elia12345

あなたがあなたの答えを見つけたかどうかはわかりません。しかし、私は関連する 質問 あなたのものに似ていることを発見しました。

「onTouchは、インターフェイスを宣言してリスナーを正しく配置している限り、(アクティビティまたはビューにあるかどうかに関係なく)どこでも機能します。一方、onTouchEventはビュー内でのみ機能します!」

スクロールとズームの機能については、onTouchListenerで両方の機能(および回転など)を完了するのに十分だと思います。

1
Lee Yi Hong