2012-01-09 3 views
15

У меня есть WebView в ViewPager. И ViewPager, кажется, потребляет всю горизонтальную прокрутку, так что я не могу прокручивать в WebView (вертикальные работы).Прокрутить веб-представление в Viewpager

Как достичь того, что WebView имеет приоритет, потребляющий горизонтальную прокрутку?

+0

Вам придется переопределить пейджер представления, я не нахожусь надолго, надеюсь, что я помню, когда я туда доберусь –

+0

эй :) что-то новое с этим, тоже застрял с той же проблемой ... :) – cV2

ответ

8

не спрашивайте меня, почему этот код получает отформатирован, как это,

1. реализовать пользовательские ViewPager Instance так:

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 

public class CustomViewPager extends ViewPager { 

    private MagazineWebView_WithoutFlipWebView mCurrentPageWebView_; //custom webview 

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

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 

     if (Constants.LOGGING) { 
      Log.v(Constants.LOG_OEAMTC_APP, "CustomViewPager - onInterceptTouchEvent"); 
     } 

     // if view zoomed out (view starts at 33.12... scale level) ... allow 
     // zoom within webview, otherwise disallow (allow viewpager to change 
     // view) 
     if (mCurrentPageWebView_ != null && (mCurrentPageWebView_.getScale() * 100) > 34) { 
      Log.v(Constants.LOG_OEAMTC_APP, "CustomViewPager - intrcepted: " + String.valueOf((mCurrentPageWebView_.getScale() * > 100))); 
      this.requestDisallowInterceptTouchEvent(true); 
     } 
     else { 
      if (mCurrentPageWebView_ != null) { 
       Log.v(Constants.LOG_OEAMTC_APP, 
         "CustomViewPager - not intrcepted: " + String.valueOf(mCurrentPageWebView_.getScale() * 100)); 
      } 
      this.requestDisallowInterceptTouchEvent(false); 
     } 

     return super.onInterceptTouchEvent(event); 
    } 

    public MagazineWebView_WithoutFlipWebView getCurrentPageWebView() { 
     return mCurrentPageWebView_; 
    } 

    public void setCurrentPageWebView(MagazineWebView_WithoutFlipWebView currentPageWebView) { 
     mCurrentPageWebView_ = currentPageWebView; 
    } 
} 

2. в вашем основном (ViewPager) мероприятии добавьте следующие строки в пейджер представления

mViewPager_ = new AwesomePagerAdapter(); 
     viewpapgerInLayout = (CustomViewPager) findViewById(R.id.awesomepager); 
     viewpapgerInLayout.setAdapter(mViewPager_); 
     viewpapgerInLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
        viewpapgerInLayout.setCurrentPageWebView(mLstPagesWebviews_.get(position)); 
      } 

      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

3. наконец, запустить его: =) если уровень масштабирования при первоначальном увеличении, изменения страниц разрешено, все другое время вы можете перемещаться по веб-просмотра

Ps. : * не забудьте * изменить ViewPager в вашем * .xml файл с CustomViewPager класса вы только что создали

удачи :)

+2

можно изменить код так, чтобы, если веб-просмотр полностью прокручивается в одну сторону, а затем, если я прокручу еще больше в направлении, в котором просмотрщик потребляет свиток, даже если веб-просмотр не имеет встроенного уровня масштабирования? – anonymous

+0

да, я думаю, что я могу быть в состоянии, вам нужно только адаптировать код (для меня это не обязательно), но, возможно, для других было бы здорово, если бы вы делились своим кодом. теоретически просто получить доступ к осям X, Y веб-просмотра и проверить, находитесь ли вы на границе или нет, если да, пусть зритель меняет страницу :) удачи: =) (проголосовать за этот ответ, если вам это нравится) – cV2

1

Попробуйте

WebView mWebView = (WebView) findViewById(R.id.MyWebview); 
mWebView.getSettings().setLoadWithOverviewMode(true); 
mWebView.getSettings().setUseWideViewPort(true); 
mWebView.getSettings().setSupportZoom(true); 
mWebView.getSettings().setBuiltInZoomControls(true); 
mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3"); 
+0

Без изменений. Он все еще не работает. – anonymous

Смежные вопросы