2

iOS の世界ではtouchUpInside、タッチがビュー内で開始され、ユーザーがビュー バウンド内で指を離したという概念があります。

touchAndroidでvs (イベントリスナー)を見clickていますが、それらの違いを知りたいです。

4

3 に答える 3

3

タッチ イベントは、より基本的なものです。たくさんの種類があります。最も一般的なものは次のとおりです。

DOWN: ユーザーがアイテムをタッチ

MOVE:ユーザーがアイテムに触れた後、アイテムを移動します

UP: ユーザーがアイテムに触れるのをやめます

CANCEL: ユーザーはアイテムから離れましたが、まだ画面に触れています。

Android では、clickイベントはタッチ イベントの複合体です。click両方DOWNUPアクションの場合。で見つけることができる他のものがありますGestureDetectorFlingたとえばDOWN、 、MOVE、およびの組み合わせはUP、ユーザーが指を非常に速くスワイプしたことを示す速い動きです。

編集:

Android がonTouchEvent() でtrueとを処理する方法を明確にしました。false

十分に文書化されているわけではありませんが、Android でビューが機能する方法は、ビューをタッチすると、そのタッチ イベントが親ビューからすべての子ビューに送信されるというものです。次に、各子はそのイベントを自分の子に送信します。これはdispatchTouchEvent()メソッドで行われます。

親が子のメソッドからView受信すると、その子にタッチ イベントを送信しなくなります。つまり、ビューが に戻ったとき、ビューは実際には次のように言っています。falseonTouchEvent()falseonTouchEvent()

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 つはクリックを実装する最良の方法ではありませんが、私が言おうとしていることを示していると思います。実生活では、数ピクセルであっても移動イベントは非常に一般的です。

于 2012-12-27T15:48:21.750 に答える
0

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

于 2012-12-27T15:46:47.743 に答える
0

PH7の応答を参照してください。

どちらを使うのが良いですか?

それは本当にあなたの要件に依存します。 onTouchモーションイベントを提供します。したがって、動きの状態を分離するのに役立つので、多くの凝ったことができます。ほんの数例を挙げると

  • ACTION_UP
  • ACTION_DOWN
  • ACTION_MOVE

これらは、画面上でビューをドラッグするなど、望ましい結果を得るために通常実装する一般的なアクションです。

一方、onClickユーザーが操作するビューを除いて、多くは得られません。onClickフォーカシング、プレス、リリースからなる完全なイベントです。したがって、あなたはそれをほとんど制御できません。1 つの側面は、実装が非常に簡単であることです。

両方を実装する必要がありますか?

ユーザーを混乱させたくない限り、必要ありません。単純なクリックイベントだけが必要な場合は、onClick. クリック以上のものが必要な場合は、 を選択してくださいonTouch。両方を行うと、プロセスが複雑になります。

ユーザーの観点からは、 のonTouchように慎重に実装すれば目立ちませんonClick

詳細については、これこれを参照してください

于 2012-12-27T15:47:34.320 に答える