我已经用不同的子活动实现了 TabActivity:
intent = new Intent().setClass(this, MyChildTabActiviy.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = getTabHost.newTabSpec("tag").setIndicator("indicator", getResources().getDrawable(R.drawable.icon)).setContent(intent);
getTabHost.addTab(spec);
...
到目前为止没有任何问题,一切都工作得很好。我以编程方式在选项卡之间切换,用 ActivityGroups 替换选项卡内的活动等,就像许多教程中所示的那样。
但我的问题是,当我想检查 fling 手势时,我的gestureDetector.onTouchEvent(event) 总是返回 false,因此没有注册任何手势。
这是我对gestureDetector的实现:
public class MyChildTabActiviy extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
// ... building views, controls, etc.
GestureDetector gestureDetector = new GestureDetector(this, new MyGestureDetector());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// left to right swipe and right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//... fling logic ...
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//... fling logic ...
return true;
}
return false;
}
}
问题是,当我在 TabActivity 之外启动这些活动(有四个基本活动,我有时会切换到其他活动)时,这段代码(以及 fling 检测)工作得非常好,例如作为启动器活动。但我无法让它在 TabActivity 中工作。我已经尝试将 GestureDetector 附加到 TabActivity,但它不起作用。我尝试将 GestureDetector 附加到特定视图,例如某些布局视图或按钮、ViewFlippers 等,但它不起作用。
当我调试时,我可以看到触摸事件被触发并且运动被注册,但它只是没有被评估为猛击或任何其他手势。
所以我的问题是,在 Android 中使用带有选项卡的 GestureDetectors 是否有任何限制?正如我所说,手势是在 TabActivity 之外完美注册的。
我将非常感谢知道答案的人的帮助。
如果存在限制,人们如何找到解决该问题的方法?
预先感谢您的答复。