【问题标题】:Scroll Webview in Viewpager在 Viewpager 中滚动 Webview
【发布时间】:2012-01-09 00:08:00
【问题描述】:

我在ViewPager 中有一个WebView。 而ViewPager 似乎消耗了所有的水平滚动,以至于我无法在WebView 中滚动(垂直工作)。

如何实现WebView 优先消耗水平滚动?

【问题讨论】:

  • 你将不得不覆盖视图寻呼机,我不在家希望我记得什么时候到那里
  • 嘿 :) 有了新的东西,也遇到了同样的问题...... :)

标签: android webview scroll android-viewpager


【解决方案1】:

不要问我为什么这段代码会这样格式化,

1.像这样实现一个自定义 ViewPager 实例:

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.: *不要忘记* 用您刚刚创建的 CustomViewPager 类更改 *.xml 文件中的 ViewPager

祝你好运:)

【讨论】:

  • 是否可以更改代码,以便如果 webview 完全滚动到一侧,然后如果我在方向上进一步滚动,即使 webview 没有,viewpager 也会消耗滚动初始缩放级别?
  • 是的,我认为我是可能的,你只需要调整代码(对我来说没有必要),但也许对于其他人来说,如果你分享你的代码会很棒。理论上只需访问 webview 的 X、Y 轴并检查您是否在边界上,如果是,让 viewpager 更改页面:) 祝你好运:=) (如果你喜欢这个答案,请投票)跨度>
【解决方案2】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多