iOS の世界ではtouchUpInside
、タッチがビュー内で開始され、ユーザーがビュー バウンド内で指を離したという概念があります。
touch
Androidでvs (イベントリスナー)を見click
ていますが、それらの違いを知りたいです。
タッチ イベントは、より基本的なものです。たくさんの種類があります。最も一般的なものは次のとおりです。
DOWN
: ユーザーがアイテムをタッチ
MOVE
:ユーザーがアイテムに触れた後、アイテムを移動します
UP
: ユーザーがアイテムに触れるのをやめます
CANCEL
: ユーザーはアイテムから離れましたが、まだ画面に触れています。
Android では、click
イベントはタッチ イベントの複合体です。click
両方DOWN
とUP
アクションの場合。で見つけることができる他のものがありますGestureDetector
。 Fling
たとえばDOWN
、 、MOVE
、およびの組み合わせはUP
、ユーザーが指を非常に速くスワイプしたことを示す速い動きです。
編集:
Android がonTouchEvent() でtrue
とを処理する方法を明確にしました。false
十分に文書化されているわけではありませんが、Android でビューが機能する方法は、ビューをタッチすると、そのタッチ イベントが親ビューからすべての子ビューに送信されるというものです。次に、各子はそのイベントを自分の子に送信します。これはdispatchTouchEvent()
メソッドで行われます。
親が子のメソッドからView
受信すると、その子にタッチ イベントを送信しなくなります。つまり、ビューが に戻ったとき、ビューは実際には次のように言っています。false
onTouchEvent()
false
onTouchEvent()
I am done processing touch events and all of my children are done as well.
90% の確率で、 内のすべての子のタッチ値を返しonTouchEvent()
ます。return super.onTouchEvent()
View
それでは、クリックの例を見てみましょう。DOWN
イベントでは false を返し、UP では trueを返す 1 つの方法を次に示します。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return false;
case MotionEvent.ACTION_UP:
return true;
break;
default:
return false;
}
}
この場合、 this の親はView
すぐに false を受け取ります。View
その後、完了したと言ったので、これへのタッチイベントの送信を停止します。
別の方法は次のとおりです。
boolean mPossibleClick = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPossibleClick = true;
break;
case MotionEvent.ACTION_UP:
if(mPossibleClick) {
// UP event immediately after DOWN. Perform click action
}
default:
mPossibleClick = false;
}
return mPossibleClick;
}
かなり大雑把ですが、基本的には次のようになります。DOWN
ユーザーが最初にタッチすると、 true を返すものを受け取ります。ユーザーが指を離すと、click
アクションが実行され、その後、イベントが完了したため false が返されます。ユーザーが指を動かすか、その他のアクションを実行すると、false が返され、クリックは無効になります。
最後の 1 つはクリックを実装する最良の方法ではありませんが、私が言おうとしていることを示していると思います。実生活では、数ピクセルであっても移動イベントは非常に一般的です。
onClickListener は、任意のビューのクリック イベントが発生するたびに使用されます。たとえば、Button、ImageButton のクリック イベントです。
onTouchListener は、タッチの種類の機能を実装する場合に使用されます。たとえば、正確にタッチした画面の座標を取得する場合などです。
定義:
onClickListner: ビューがクリックされたときに呼び出されるコールバックのインターフェース定義。
onTouchListener: タッチ イベントがこのビューにディスパッチされたときに呼び出されるコールバックのインターフェイス定義。コールバックは、タッチ イベントがビューに与えられる前に呼び出されます。
詳細:
onClickListener: http://developer.android.com/reference/android/view/View.OnClickListener.html
onTouchListener: http://developer.android.com/reference/android/view/View.OnTouchListener.html
PH7の応答を参照してください。
どちらを使うのが良いですか?
それは本当にあなたの要件に依存します。
onTouch
モーションイベントを提供します。したがって、動きの状態を分離するのに役立つので、多くの凝ったことができます。ほんの数例を挙げると
ACTION_UP
ACTION_DOWN
ACTION_MOVE
これらは、画面上でビューをドラッグするなど、望ましい結果を得るために通常実装する一般的なアクションです。
一方、onClick
ユーザーが操作するビューを除いて、多くは得られません。onClick
フォーカシング、プレス、リリースからなる完全なイベントです。したがって、あなたはそれをほとんど制御できません。1 つの側面は、実装が非常に簡単であることです。
両方を実装する必要がありますか?
ユーザーを混乱させたくない限り、必要ありません。単純なクリックイベントだけが必要な場合は、onClick
. クリック以上のものが必要な場合は、 を選択してくださいonTouch
。両方を行うと、プロセスが複雑になります。
ユーザーの観点からは、 のonTouch
ように慎重に実装すれば目立ちませんonClick
。
詳細については、これとこれを参照してください