在我的viewFlipper中,一些TextView动态加载。大小可能不同,这意味着在viewFlipper下可能会留下一些空间(请参见屏幕截图中的绿色部分)
我希望不仅在灰色部分(也就是viewflipper)上滑动时调用onFling方法,而且还需要在绿色部分上滑动时调用
我的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/root">
<ViewFlipper android:id="@+id/viewFlipper"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ViewFlipper>
</RelativeLayout>
在我的onCreate中,我这样做:
this.viewFlipper = (ViewFlipper) this.findViewById(R.id.viewFlipper);
this.gestureDetector = new GestureDetector(new MyGestureDetector());
RelativeLayout root = (RelativeLayout) this.findViewById(R.id.root);
root.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
Log.d("root", "true");
return false;
} else {
Log.d("root", "false");
return false;
}
}
});
到目前为止,即使我得到了真的,我也试图返回false,这样即使在viewflipper之外进行了滑动,事件也不会被消耗掉并传递给viewFlipper。
请注意,viewFlipper不需要任何显式的onTouchListener。它有或没有一个(我真的不明白为什么......)
有谁知道该怎么做?
答案 0 :(得分:8)
尝试将android:clickable="true"
添加到RelativeLayout
,您应该可以这样做。
如果这不起作用,您可能还需要实现这两种方法(如果还没有):
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//TouchEvent dispatcher.
if (gestureDetector != null) {
if (gestureDetector.onTouchEvent(ev))
//If the gestureDetector handles the event, a swipe has been executed and no more needs to be done.
return true;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}