Android Gallery圖片雙擊放大倍數的算法
圖片雙擊放大倍數和圖片大小、顯示圖片的view大小,及圖片當前的scale大小均有關系。
為了避免圖片放大過大,設置了一個放大倍數的最大限制SCALE_LIMIT,目前該值為4.
具體算法如下所示:
圖片的寬和高分別記為:imageW imageH
顯示圖片的view寬和高分別記為:viewW viewH
幾個重要的比例記為:
scale_1 = viewW / imageW; scale_2 = viewH / imageH; scale_3 = viewW / imageH; scale_4 = viewH / imageW;
如果當前圖片的寬高比>2或者<0.5,則按照如下算法計算放大倍數zoomRate:
(1)當前scale = min(scale_1, scale_2);(2)zoomRate = min(max(scale_1, scale_2), max(scale_3, scale_4));
(3)如果zoomRate > SCALE_LIMIT,則zoomRate = SCALE_LIMIT;
(4)如果scale >= zoomRate,則保留(1)的結果從第(2)步重新計算zoomRate值,否則跳至(6)
zoomRate = max(max(scale_1, scale_2), max(scale_3, scale_4));
(5)如果zoomRate > SCALE_LIMIT,則zoomRate = SCALE_LIMIT;
(6)此時zoomRate值即是圖片應該放大的倍數。
(1)當前scale = min(scale_1, scale_2);
(2)largerInitRate = max(min(scale_1, scale_2), min(scale_3, scale_4));
(3)如果largerInitRate > SCALE_LIMIT,則largerInitRate = SCALE_LIMIT;
(4)zoomRate = min(scale_2, largerInitRate * 2.0f);
(5)如果zoomRate > SCALE_LIMIT,則zoomRate = SCALE_LIMIT;
(6)如果scale >= zoomRate,則保留前3步的結果,從第(4)步重新計算zoomRate值,否則跳至(8)
zoomRate = largerInitRate * 2.0f;
(7)如果zoomRate > SCALE_LIMIT,則zoomRate = SCALE_LIMIT;
(8)此時zoomRate值即是圖片應該放大的倍數。
轉載請注明出處:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
我的GitHub:周木水的GitHub https://github.com/zhoumushui
本文由用戶 4e48 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!