1

私は Android プログラミングが初めてで、ネストされたビューでタッチ イベントを理解しようとしています。まず、私のアプリの説明は次のとおりです。

GUI エディターで追加した相対的なレイアウトがあります。すべてデフォルトです。ScrollView を拡張する ClipGrid というクラスも作成しました。その中にネストして、Horizo​​ntalScrollView を作成します。その中で、私は TableLayout を作成し、それは行です。行にはボタンが含まれています。

最終結果は、ボタンのグリッドです。一度に 4x4 を表示しますが、どちらの方向にもスクロールして他のボタンを表示できます。

次のように、メイン アクティビティから画面に呼び出します。 ClipGrid clip_grid = new ClipGrid(this); setContentView(clip_grid);

これはテスト目的のためだけに行ったもので、後で別のビューを相対レイアウトに追加したいときに変更する必要があると思います。しかし、タッチイベントに影響を与える可能性があると思います。

最後に、グリッドが移動されたことを検出し、ユーザーが指を離したときに、新しく表示可能なボタンの 4x4 グリッドをレイアウトの端にスナップしたいと考えています。これを実装する方法がわからないので、助けていただければ幸いです。ありがとう。

4

1 に答える 1

3

タッチ イベントが処理される方法は、トップ ビューから始まり、下位のネストされたビューに至る一種のカスケード効果です。true基本的に、Android はが返されるまで各ビューにイベントを渡します。

onTouchEventa のイベントを実装できる一般的な方法は次のViewとおりです。

@Override
public boolean onTouchEvent(MotionEvent event) {
  boolean actionHandled = false;
  final int action = event.getAction();

  switch(action & MotionEventCompat.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
      // user first touches view with pointer
      break;
    case MotionEvent.ACTION_MOVE:
      // user is still touching view and moving pointer around
      break;
    case MotionEvent.ACTION_UP:
      // user lifts pointer
      break;
  }

  // if the action was not handled by this touch, send it to other views
  if (!actionHandled) 
     actionHandled |= super.onTouch(v, MotionEvent.event);

  return actionHandled;
}
于 2012-08-13T13:28:40.270 に答える