您的位置:首页 > 其它

[置顶] viewPager+photoView实现图片轮播和手势缩放功能,并且实现滑动到下一页后上一页缩放的图片会恢复到之前的默认状态(下)

2016-06-04 10:57 507 查看
在上篇文章中,讲到了photoView和viewPager结合打造可以左右滑动的支持手势缩放的相册功能,但是还有一个问题没有解决,那就是当我们将当前页面的图片放大后,当我们滑动到下一页,然后滑回上一页之后,发现上一页的图片还是处于缩放的状态,而不是默认的状态,这不是我们想要的结果。用户体验非常不好。那怎样解决这个问题呢?

其实非常的简单,就是当我们滑动到下一页的时候,给之前的其他页面遍历重新设置一次显示的状态,这样就可以满足我们的需求了。具体的操作步骤如下:

1.给viewPager添加监听

viewPager.setOnPageChangeListener(this);

2.将如下代码放入到重写的viewPager的public void onPageSelected(int arg0) {},这个方法里面。

// 当图片滑动到下一页后,恢复其他所有图片默认大小状态的代码块
// viewPager得到页面的数量
int childCount = viewPager.getChildCount();
// 当图片滑动到下一页后,遍历当前所有加载过的PhotoView,恢复所有图片的默认状态大小
for (int i = 0; i < childCount; i++) {
View childAt = viewPager.getChildAt(i);
try {
if (childAt != null && childAt instanceof PhotoView) {
PhotoView photoView = (PhotoView) childAt;// 得到viewPager里面的页面
PhotoViewAttacher mAttacher = new PhotoViewAttacher(
photoView);// 把得到的photoView放到这个负责变形的类当中

//mAttacher.getDisplayMatrix().reset();// 得到这个页面的显示状态,然后重置为默认状态或者做其他的操作

//这里得到这个页面后,直接重新设置了他的属性,让其拉伸充满全屏,你可以根据自己的需求,设置其他属性
//重新设置属性之后,当从当前放大页面滑动到下一页的时候,前面的放大页面就会重新成为设置的属性大小
mAttacher.setScaleType(ScaleType.FIT_XY);

}
} catch (Exception e) {
e.printStackTrace();
}
}

好了,现在可以运行程序了,是不是问题已经解决。
那么问题又来了,我们现在加载的是本地的图片,但是大部分时间我们都需要加载网络上的图片来显示,那么具体怎样实现呢,在下一篇文章中我们会具体介绍。

下面是这个完整Demo的下载地址,可以下载研究一下

http://download.csdn.net/detail/beibaokongming/9540986
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: