0

我在 ViewPager 中使用 WebView 来显示来自互联网的图像。使用 WebView 是因为它内置了缩放控件。我想让我的用户在寻呼机中缩放图像,但是当他们滑动到下一个图像时,可以恢复上一个图像的原始缩放。我尝试了一些东西,其中只有一个给了我想要的功能,但这不是一个足够好的解决方案,因为在浏览页面时会闪烁。

mPager.setOnPageChangeListener(new OnPageChangeListener(
            ) {

        @Override
        public void onPageSelected(int arg0) {
            currImg = arg0;
            //System.out.println("On page selected");
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            //System.out.println("On page scrolled");

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            if(arg0 == 2) {
                //mPager.getAdapter().
                mPager.getAdapter().notifyDataSetChanged();
                System.out.println("Notifying Data Set Changed " + mPager.getCurrentItem());
            }

        }
    });

在 ViewPager 适配器中,我重写了 getItemPosition,因此它会返回 POSITON_NONE。这不是一个好的解决方案,因为每次滑动都会刷新页面,并且页面之间没有平滑过渡。欢迎任何建议。

4

3 回答 3

1

这已被证明是将页面恢复到初始缩放状态的最佳方式:

    pager.setOnPageChangeListener(new OnPageChangeListener() {
        public void onPageScrollStateChanged(int arg0) {}
        public void onPageScrolled(int arg0, float arg1, int arg2) {}
        public void onPageSelected(int arg0) {
            System.out.println("onPageSelected -> arg0 = " + arg0);

            if (currPage != arg0) {
                mAdapter.notifyDataSetChanged();
                currPage = arg0;
            }
        }
    });

比,在您的适配器类中,您可以像这样覆盖 getItemPosition 方法:

@Override
public int getItemPosition(Object object) {
    if (((ExtendedWebView) object).getScale() != webScale) {
        return POSITION_NONE;
    }
    return POSITION_UNCHANGED;
}
于 2012-09-06T11:02:37.350 回答
0

您可以将页面恢复到初始缩放状态吗?

于 2012-07-17T09:27:29.923 回答
0

好吧,您看到的闪烁是因为再次加载数据并生成视图,对您来说看到可能只是一点点闪烁,但是如果您在其中添加更多内容,或者您​​为每个视图添加了一些下载或流式传输,则该闪烁将变为白页加载。您可以做的是在页面更改的侦听器上添加代码以在最后一个 webview 上设置当前缩放级别。

例子:

lastPos = pos - 1;
((WebView) mPager.getChildAt(lastPos)).getSettings().setDefaultZoom(zoomLevel);

注意:这只是一个示例,也许您必须根据您的配置更改某些内容,然后才能使用您的代码。

此示例假定 WebView 是 viewpager 中每个页面的唯一子级,如果您有更多或 WebView 在相对或线性布局内,则必须添加代码以检索 WebView 并应用更改在变焦。

更新:

如果您希望图像占据 webview 内的所有屏幕,您可以这样做。在这种情况下,“web”是我的“WebView”类型的对象。祝你好运。

web.loadData("<html><head></head><body><img src='" + url //IMAGE URL
+ "' style='width:100%;height:98%;max-width:100%;max-height:98%;'></body></html>",
"text/html", "utf-8"); //THIS WILL FIT THE IMAGE TO TAKE ALL THE SCREEN
于 2012-08-03T17:21:38.267 回答