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

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

    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;
}

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

你看到的闪烁是因为再次加载数据并生成视图,对你来说可能只是一个小小的闪烁,但如果你在其中添加了更多内容,或者你为每个视图添加了一些下载或流媒体,那么这个闪烁将变为白色页面加载。您可以做的是,在页面更改的侦听器上,您应该添加代码来设置上一个Web视图的当前缩放级别。

示例:

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

最新更新