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

在上篇文章中,https://blog.csdn.net/beibaokongming/article/details/51559279 讲到了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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值