2012-02-29 16 views
3

私はAndroid開発の初心者です。現時点では、ジェスチャーの入力を制御する場所を決定する必要がありますが、タッチ入力を取得する場所と長所についてはわかりません。私は2つの選択肢を与えられています、どちらかの長所と短所を私に説明してください。どこでAndroid onTouchListenerを実装すればよいですか?

ビュー上にリスナーを設定します。実装方法:

faceView.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View arg0, MotionEvent arg1){ 
    return false; 
    } 
); 

または私は個人的にリスナーを使用します

public boolean onTouchEvent(MotionEvent event){ 
    return false; 
} 

答えて

2

アプローチ1:匿名の内部型。

faceView.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View arg0, MotionEvent arg1){ 
    return false; 
    } 
); 

これは名前のない宣言であるため、これは匿名です。 OnTouchListener mytouch =はありません。new OnTouchListener()という宣言だけがあります。これはインナーです。なぜなら、それは別のクラスの中にあるからです。インタフェースはインプリメンテーションであるため、型です。

これを念頭に置いてください。このアプローチは開発者にとってより便利です。機能は分離されており(一般的には聴取者の宣言によって)、これは容易に管理されます。しかし、この利便性にはコストが伴います。 10個のonClickListenersを持つボタンがあるとします。この方法では、新しい匿名の内部型ごとにガベージコレクションキューがいっそういっぱいになります。

でも問題ありませんか?あんまり。パフォーマンスを1マイクロ秒ごとにシステムから取り出そうとしている場合は、この方法を使用しないでください。しかし、一般的に、これは実行可能です。

アプローチ2:単一継承

public boolean onTouchEvent(MotionEvent event){ 
    return false; 
} 

あなたは上記を読むと仮定すると、このアプローチは、創造とクリーンアップのためにはるかに低いコストです。インスタンス化されたクラスは1つしかなく、GCキューに追加されたオブジェクトは1つだけです。

これは私が使用しているアプローチであり、しばらく使っています。また、Googleのサンプルソースコードにも記載されています。

しかし、それは完璧ではありません! onTouchEventの実装では、次のような探してしまいます。

public void onTouch(Event e){ 
if (e.equals(View1)){ 
}else if (e.equals(View2)){ 
}else if (e.equals(View 3)){ 
...} 

SO

を正直なところ、それは問題ではありません。最高のパフォーマンスを可能にするには、静的なonTouchEventリスナーを使用してください。上記のコストを支払う必要はありませんが、ほとんどの場合、それほど高価ではありません。

0

ビュー内

オーバーライドメソッドは、ちょうどあなたのonCreateメソッドでは、今

0

の罰金であることを使用しますほとんどの場合、setOnTouchListenerは柔軟性が高く、一般的なJavaパターンに従うので、おそらくsetOnTouchListenerを使用します。通常、onTouchEventをオーバーライドするのは、View内で常に発生するtoucheventと変更されないtoucheventに対してのみ使用されます。 onTouchEventをオーバーライドするには、Viewクラスを定義する必要もあります。ボタンのようなものを使用する場合、クリックイベントを処理するために独自のボタンクラスを実装する必要はありません。

faceView.setOnTouchListener

プロ

  • は簡単にカスタマイズできます

短所が

  • につながる可能性が一般的に受け入れられているJavaのパターンに続きます。動作が変わらない場合は不要なセッター。

オーバーライドは プロ

  • は、基本クラス

短所で機能をカプセル化しonTouchEvent

  • カスタマイズすることができません
関連する問題