1

我对 Android 编程非常陌生,并试图通过嵌套视图来理解触摸事件。首先,这是我的应用程序的描述:

我有一个通过 GUI 编辑器添加的相对布局。一切都是默认的。我还创建了一个名为 ClipGrid 的类,它扩展了 ScrollView。嵌套在其中,我制作了一个 Horizo​​ntalScrollView。在其中,我制作了一个 TableLayout 和它的行。这些行包含按钮。

最终结果是一个按钮网格。它一次显示 4x4,但可以滚动任一方向以显示其他按钮。

我从我的主要活动中将其调用到屏幕上,如下所示: ClipGrid clip_grid = new ClipGrid(this); setContentView(clip_grid);

我这样做只是为了测试目的,我想我以后想在我的 relativelayout 中添加其他视图时必须更改它。但我认为它可能对触摸事件有影响。

最后,我想检测网格何时移动,并在用户抬起手指时将新可见的 4x4 按钮网格捕捉到布局的边缘。我只是不确定如何实施这一点,任何帮助将不胜感激。谢谢。

4

1 回答 1

3

处理触摸事件的方式是一种级联效果,从顶部视图开始,向下到较低的嵌套视图。基本上,Android 会将事件传递给每个视图,直到true返回。

您可以实现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 回答