2013-08-06 6 views
1

저는 LinearLayout에 webview 및 ViewPager가 있습니다. 내가 모두 웹보기와 ViewPager에 OnTouchListener 설정하는 동안Android : 뷰 페이지 터치 이벤트가 작동하지 않습니다.

<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에 MotionEvent를 전달하려고합니다.

내 코드는 다음과 같습니다.

...

08-06 : 07 : 09 : 16.321 : 여기

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; 
       } 
      }); 
     } 

내 로그입니다 W는/(26460)이 : mPager.dispatchTouchEvent (전자)가 true

을 = 08-06 07 : 09 : 16.321 : W/(26,460) onTouch

08-06 07 : 09 : 16.321 : W/(26,460) ACTION_MOVE

08-06 7시 9분 : 16.321 : W/(26,460) mPager.onTouch

08-06 07 : 09 : 16.321 : W/(26,460) mPager.ACTION_MOVE

...

ViewPager onTouchListener 잘 검출 MotionEvent , 뷰 페이지는 움직이지 않았다.

도움이 될 것입니다.

답변

2

이 문제는 해결되었습니다. ViewPager의 onTouch 메서드를 재정의하고 onTouch 메서드에서 아무 것도하지 않았습니다. 그래서 뷰 ​​페이지가 터치 이벤트를 받았지만 이동하지 않았습니다. 내가 재정 의하여 TouchListener를 제거했을 때 잘 작동했습니다.

관련 문제