Android:如果用户将其放大,如何缩小ViewPager中的单个页面?

时间:2012-07-17 09:13:02

标签: android webview android-viewpager

我在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。 这不是一个好的解决方案,因为每次滑动都会刷新页面,并且页面之间没有平滑过渡。欢迎任何建议。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您能否将页面还原为初始缩放状态?

答案 2 :(得分:0)

眨眼你看到的原因是再次加载数据并生成视图,看到你可能只是有点眨眼但是如果你还有更多东西或者你为每个视图添加一些下载或流媒体,那就眨眼将成为白页加载。 你可以做的是page changed listener你应该添加代码来设置上一个网页浏览的当前缩放级别。

示例:

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