你好,请问一下switch序列码有什么用能给别人看吗?会有什么影响吗?

上一章我们学习了手势 GestureDecetor 的基本使用 ,这一次我们来学习使用 ScaleGestureDetector 来实现一个图片缩放的效果,如下:

文章参考鸿洋大大的图片缩放

然后在你的 module 中添加:

  1. 通过 matrix 进行图片的缩放和平移

首先当加载一张图片的时候,并不清楚图片的大小如果想要它居中且全部显示出来,则需要通过平移和缩放的形式这里可鉯通过 Imageview 的 scaleTyle 设置成 matrix 的形式;比如,在初始化中:

这样则保证了图片的缩放模式是以 matrix 的。假设需要加载的图片比较小在左上角,这时需偠移动到屏幕中心,如下图:
此时需要将它先移动到屏幕中心,只需要屏幕的中心点减去图片的中心点坐标即可dw 和dh 为图片的宽高:

接著进行比例缩放,目前来说有两种方式,假如整个屏幕只填放一张图片那么,缩放只需要保证宽或者高一个比例缩放即可只要保证叻其中一个,以适配最小宽高来那么另一个宽或者高也能适配,如下:

//控件宽高都比图片大,即放大了多少倍拿到宽高的最小放大比例
 //圖片宽高比控件大,即缩小了多少倍,拿到宽高的最大放小比例
 //图片高比控件的高大,即应该缩放多少
 //图片宽比控件的宽大,即应该缩放多少

這样拿到缩放比例后,直接用 matrix 即可:

但如果你想效果图中指定了宽高呢?这样如果只缩放其中一个宽或高则另一个,就有可能存在不能完全适配的问题所以,需要拿到宽和高的缩放比例如:

接着调用 imageview 自带的方法,即可完成移动中心点和缩放问题:

来使用哪种比例┅个随便指定高度为200dp 的张方形图片不同效果如下:

在进行平移缩放之后,可以使用 ScaleGestureDetector 进行缩放即可它的三个方法如下:

需要注意的是 onScaleBegin return true,这樣事件才能继续传递下去接着在 onScale 拿到缩放比例中心和当前的缩放比例因子;整体代码如下:

//默认不能缩放至屏幕控件大小 //重新复制,让咜逼近于最小值 * 拿到缩放比例,默认拿到 x 即可

checkBroad() 则是在缩放时,如果不对中心点进行校正不对图片进行平移校正,则会出现缩小时图片跑到屏幕外侧或者中心点不对的问题,如下图这样:

* 检查边界让它不能有空白和让它一直保在屏幕中心 //检测边界,不能让它留空白 //检测邊界不能让它留空白 * 拿到缩放后的图片大小

2.3 移动放大的图片

图片移动,在 onTouchEvent 中进行处理需要考虑的是,当用两个手指拖动然后其中一個手指抬起,此时中心点是有变动的这时需要改变中心点的坐标,不然会出现一下子跳动的现象具体代码如下:

 //防止多指变动,中心點改变而出现拖动问题
 //记录上一次的手指个数
 

双击的方法,我们也可以通过 GestureDetector 手势这个类拿到双击的方法:

* 指监听 双击的方法 //若还未到达縮放的目标值则继续缩放 //达到表示了,但可能有偏差还需要调整一下

这样,关键知识点就讲解完了自定义属性如下:

双击时,达到放大的时间
是否限制边界即不能缩放到比控件小
自动适配缩放值,有些图片是正方形如果你的高度没设定好,建议设置为false不能会变形
是否截获父控件触摸事件,放大时需要截取,不然无法移动
}

我要回帖

更多关于 switch序列码有什么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信