我在LinearLayout中有一个webview和ViewPager。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/webview_wrapper"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<android.support.v4.view.ViewPager
android:id="@+id/slide_page"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#696969"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone" />
我在webview和ViewPager上设置了OnTouchListener。 我尝试开始拖动webview并在拖动时将MotionEvent传递给viewPager。
我的代码如下。
WebView mainView = tab.getWebView();
mainView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
Log.w("LOGTAG", "onTouch");
switch (e.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.w("LOGTAG", "ACTION_UP");
break;
case MotionEvent.ACTION_MOVE:
Log.w("LOGTAG", "ACTION_MOVE");
Test(...);
mPager.dispatchTouchEvent(e);
break;
case MotionEvent.ACTION_UP:
Log.w("LOGTAG", "ACTION_UP");
break;
}
return false;
}
});
private void Test(...) {
FrameLayout wrapper =
(FrameLayout) container.findViewById(R.id.webview_wrapper);
mPager = (ViewPager)container.findViewById(R.id.slide_page);
...
wrapper.setVisibility(View.GONE);
mPager.setVisibility(View.VISIBLE);
mPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
Log.w("LOGTAG", "mPager.onTouch");
switch (e.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.w("LOGTAG", "mPager.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.w("LOGTAG", "mPager.ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
Log.w("LOGTAG", "mPager.ACTION_UP");
break;
}
return false;
}
});
}
这是我的日志:
...
08-06 07:09:16.321:W /(26460):mPager.dispatchTouchEvent(e)= true
08-06 07:09:16.321:W /(26460):onTouch
08-06 07:09:16.321:W /(26460):ACTION_MOVE
08-06 07:09:16.321:W /(26460):mPager.onTouch
08-06 07:09:16.321:W /(26460):mPager.ACTION_MOVE
...
ViewPager onTouchListener很好地检测到了MotionEvent,但是viewpager没有移动。
非常感谢任何帮助。
答案 0 :(得分:2)
我解决了这个问题。 我重写了Viewpager的onTouch方法,在我的onTouch方法中没有做任何事情。 所以viewpager收到触摸事件但没有移动。 当我删除了我覆盖的TouchListener时,它运行良好。