[置顶] 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
其实非常的简单,就是当我们滑动到下一页的时候,给之前的其他页面遍历重新设置一次显示的状态,这样就可以满足我们的需求了。具体的操作步骤如下:
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
相关文章推荐
- 微软正版镜像地址
- nagios监控进程
- 编译成exe可执行文件的过程
- 【Java】validAnagram同字母异序
- jquery 源码分析初步
- 因为无耻的查重系统,我删除了四篇随笔
- HDU 2089 不要62 (递推+暴力或者数位DP)
- #pragma
- C语言数字转换为字符的问题
- 内存的字节对齐及结构体的sizeof计算
- C语言数组
- python类4
- php防sql注入
- 关于#include
- javascript 自己实现数字\字母和中文的混合排序方法 by FungLeo
- Boyer–Moore majority vote algorithm 博耶-穆尔多数投票算法 leetcode第229题
- 利用Docker Registry服务实现多数据中心的部署优化
- 在vbox虚拟机中ubuntu系统上建立arm交叉编译环境
- 关于自定义View的状态改变
- Genymotion模拟器及其相关虚拟机下载地址