1. 程式人生 > >android 圖片雙擊放大倍數的算法

android 圖片雙擊放大倍數的算法

ack 過大 保留 trac scale max nbsp pos ini

圖片雙擊放大倍數和圖片大小、顯示圖片的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值即是圖片應該放大的倍數。



假設當前圖片的寬高比<=2或者>=0.5,則依照例如以下算法計算放大倍數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值即是圖片應該放大的倍數。

android 圖片雙擊放大倍數的算法