最近两天看了研究了一下大热的照片缩放控件开源框架的源码。根据项目上面的要求找到了几个方法,看着网上好像没有人分享这一块,索性把这几个方法贴出了分享一下。
本文有些地方可能会有问题,请大佬指正。
--------------------------------------------------------------------------------------------------------
github: https://github.com/chrisbanes/PhotoView
环境:AS 3.2.1,Win7,photoview 1.3.1
--------------------------------------------------------------------------------------------------------
代码设置缩放度
photoView 在加载完一个图片之后,默认是没有缩放的。如果我们想加载完图片之后,进行自定义的缩放的等级的话,则需要进行进一步的处理。
进入源码,我们可以看到在photoview中,没有直接处理点击事件的方法,都是通过一个叫 PhotoViewAttacher 类,来进行点击事件的处理的(在写这篇博客的时候,突然发现这种模式不是跟 Andorid中的 WindowManagerImpl 与 WindowManagerGlobal 类似。。。),终于在PhotoView中找到了一系列的设置缩放的方法
还是通过这个PhotoViewAttacher 来控制缩放的,我们进入到这个方法里面去看一下
瞅了一眼,应该就是这个方法,获取到了对应的imageview,然后进行缩放。
那我们试一下这个方法:
photoview.setScale(2.25f, width / 2,height / 2, true);
说明一下几个参数,第一个参数放大级别(float)
第二个参数和第三个参数则是有点迷,看上去感觉像是放大的中心点,但是我试了一下好像并不太像,这个有待再挖一下(由于需求所要求的放大位置不是这么的高,所以我没有深入下去)
第四个参数是是否启动动画,如果是true,就会启动一个runable,进行放大图片。这里我也试了一下false,发现没有图片还是保持原样,没有进行缩放,我估计可能是需要进行一次界面或者view的刷新才行
另外:这个方法还需要在图片加载完成之后,在进行调用。不然可能会无效。
--------------------------------------------------------------------------------------------------------
息屏之后缩放度不重置
在使用photoView的过程中,发现在息屏或者父布局发生了重绘事件之后,photoview就会重新恢复成未进行缩放的样子。
这时候我就想能不能让他不恢复呢,让我继续一头闷进photoview的源码。
最后发现在这种情况下,photoview都会调用到一个方法
mAttacher.update() 这个方法除了在这里用到,其他都是在设置图片源那里用到。
那我们改一下这个方法不就行了
重写一个类继承photoview,重写这个方法,让他只在第一次调用的时候启用
再把控件替换一下,运行一下,息屏一下,再唤醒,缩放不变,好像完成我们的需求了。