2017-03-01 84 views
10

我使用ViewPagerWebViewHTML內容作爲電子書出現。在ViewPager的一些網頁,我讓TouchEvent通過的WebView和一些網頁,我讓ViewPager自己來處理TouchEventViewPager(某些頁面重載onInterceptTouchEvent方法處理的有TextViewsButtonsWebView 1和最後一頁)。下面是各項─帶WebView的ViewPager允許刷卡和禁止滾動WebView

@Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     if (getCurrentItem() == 0 || getCurrentItem() == getAdapter().getCount() - 1) 
      return false; 
     else { 
      if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
       return false; 
      } 
      return true; 
     } 
    } 

我又不允許滾動碼使用我對着下面的代碼 -

contentView.setOnTouchListener((v, event) -> { 
      if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_MOVE) { 
       ((BigBeeViewPager) v.getParent().getParent()).onInterceptTouchEvent(event); 
      } 
      return true; 
     }); 

問題設置上WebViewOnTouchListener - 當我試圖從頁面中間滑動ViewPager不起作用。我必須從頁面尾部開始滑動。不過,它對於沒有的頁面可以正常工作WebView 如何讓它從頁面中的任何位置開始滑動。

此行爲類似於Gmail的Android應用其中ViewPager由含有web視圖然後滑動可從任何地方。我無法弄清楚他們是如何做到的。

注 -當我攔截所有TouchEventWebView它禁用長點擊文本選擇也一樣,這是不可取的。

在此先感謝您的幫助。

+0

可以將內容顯示裏面'WebView'進行縮放和滾動?或者滾動行爲應該只適用於'ViewPager'? – j2ko

+0

只能使用「ViewPager」啓用滾動。然而,縮放和其他行爲,如 - 長按鼠標文本選擇應啓用'WebView'。 –

+0

@Sanjeet Ajnabee請與項目數據分享項目。至少有viewpager內容和webview? –

回答

2

在這裏,你去人 - 一個很好的解決方案老問題。

採取這裏看看Scroll webview horizontally inside a ViewPager

+0

終於工作了。它是該死的容易。非常感謝! –

+0

請從引用的鏈接添加答案部分,以便其他人可以得到答案,基本上允許/禁止滾動到子視圖的部分解決了問題! –

0

你必須創建一個GestureDetector和實施上Webview這樣的:

GestureDetector gestureDetector=new GestureDetector(new GestureDetector.OnGestureListener() { 
     @Override 
     public boolean onDown(MotionEvent motionEvent) { 
      return false; 
     } 

     @Override 
     public void onShowPress(MotionEvent motionEvent) { 
     } 

     @Override 
     public boolean onSingleTapUp(MotionEvent motionEvent) { 
      return false; 
     } 

     @Override 
     public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
      return false; 
     } 

     @Override 
     public void onLongPress(MotionEvent motionEvent) { 
     } 

     @Override 
     public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
      return false; 
     } 
    }); 

      webView.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: 
         case MotionEvent.ACTION_UP: 
          if (!v.hasFocus()) { 
           v.requestFocus(); 
          } 
          break; 
        } 
        gestureDetector.onTouchEvent(event); 
        return false; 
       } 
      }); 

而且從Viewpager刪除Interceptor並使用默認的一個沒有任何變化

+0

我試過這個,不行。 –

0

MarkySmarky是非常有用的找出解決方案,但我仍然想寫答案部分,以便其他人們可以獲得幫助。

我通過重寫方法

protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) 
ViewPager

和返回false如果vWebView的情況下解決了這個問題。這不會讓WebView自動滾動,因此ViewPager將它視爲nono滾動的子項,並因此從頁面的任何位置滑動作品。

最後我ViewPager正在尋找喜歡 -

public class BigBeeViewPager extends ViewPager { 

    public BigBeeViewPager(Context context) { 
     super(context); 
    } 

    public BigBeeViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
     return !(v instanceof ObservableWebView) && super.canScroll(v, checkV, dx, x, y); 
    } 
}