我已经用不同的子活动实现了我的 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 替换选项卡中的活动等,就像在许多教程中显示的那样。
但我的问题是,当我想检查一个投掷手势时,我的gestureDetector.onTouchEvent(event) 总是返回false,因此没有注册手势。
这是我对手势检测器的实现:
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 之外(例如作为 Launcher Activity)启动这些活动(有四个基本活动,我有时会切换到其他活动)时,这段代码(以及投掷检测)工作得非常好. 但我无法让它在 TabActivity 中工作。我已经尝试将 GestureDetector 附加到 TabActivity,但它不起作用。我尝试将 GestureDetector 附加到特定视图,例如某些布局视图或按钮、ViewFlippers 等,但它不起作用。当我调试时,我可以看到触发了触摸事件并注册了一个动作,但它并没有被评估为一个投掷或任何其他手势。
所以我的问题是,在 Android 中使用带有标签的 GestureDetectors 是否有任何限制?正如我所说,手势完全注册在 TabActivity 之外。
我将非常感谢知道答案的人的帮助。如果有限制,有人怎么能找到解决该问题的方法?
提前感谢您的回答。