Android:viewpager触摸事件无效

时间:2013-08-06 07:24:12

标签: android-viewpager ontouchevent

我在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没有移动。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我解决了这个问题。 我重写了Viewpager的onTouch方法,在我的onTouch方法中没有做任何事情。 所以viewpager收到触摸事件但没有移动。 当我删除了我覆盖的TouchListener时,它运行良好。