我在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