package in.srain.cube.views.ptr.demo.image; import in.srain.cube.image.ImageTask; import in.srain.cube.image.impl.DefaultImageResizer; import in.srain.cube.util.CLog; /** * Created by srain on 8/19/14. */ public class DemoDuiTangImageResizer extends DefaultImageResizer { private static DemoDuiTangImageResizer sInstance; public static DemoDuiTangImageResizer getInstance() { if (sInstance == null) { sInstance = new DemoDuiTangImageResizer(); } return sInstance; } private static String TAG = "thumb"; private static String SP = "_"; private static String DOT = "."; private static final int[] CDN_FIX_WIDTH_SIZE = {110, 150, 170, 220, 240, 290, 450, 580, 620, 790}; @Override public String getRemoteUrl(ImageTask imageTask) { String url = imageTask.getOriginUrl(); int size = findBestCDNSize(CDN_FIX_WIDTH_SIZE, imageTask.getRequestSize().x, true); url = url.replace(TAG, TAG + DOT + size + SP + size); CLog.d("test", "getRemoteUrl: %s %s", imageTask.getRequestSize(), url); return url; } private static int binarySearch(int[] srcArray, int des, boolean higher) { int low = 0; int high = srcArray.length - 1; while (low <= high) { int middle = (low + high) / 2; if (des == srcArray[middle]) { return middle; } else if (des < srcArray[middle]) { high = middle - 1; } else { low = middle + 1; } } if (high < 0) return 0; if (higher) { if (des > srcArray[high] && high + 1 <= srcArray.length - 1) { high = high + 1; } } else { if (des < srcArray[high] && high - 1 >= 0) high = high - 1; } return high; } private static int findBestCDNSize(int[] array, int size, boolean higher) { if (size >= array[array.length - 1]) { return array[array.length - 1]; } int pos = binarySearch(array, size, higher); return array[pos]; } }