2013-08-06 83 views
1

我在LinearLayout中有一個webview和ViewPager。Android: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" /> 

雖然我設置OnTouchListener雙方的WebView和ViewPager。 我嘗試在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; 
       } 
      }); 
     } 

這是我的日誌:

...

7月8日至6日:09:16.321:W /(26460):mPager.dispatchTouchEvent(E)=真

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

7月8日至六日:09:16.321:W /(26460):mPager.ACTION_MOVE

...

ViewPager onTouchListener檢測MotionEvent以及,但viewpager沒有移動。

任何幫助將不勝感激。

回答

2

我解決了這個問題。 我重寫了Viewpager的onTouch方法,而我的onTouch方法沒有做任何事情。 因此,viewpager收到觸摸事件,但沒有移動。 當我刪除了我忽略的TouchListener,並且它運行良好。