Android开发过程中,我们有时需要动态得显示一些图片,并且这些图片的大小差距会十分大,如果需求并不是需要图片完整显示,但是需要不失真,并且要图片中间部分的情况下,我们需要做一系列处理,因为这个时候ImageView的各种scale type都不适用。具体步骤详见下面代码,大家也可以直接拷过去作为工具类使用
1 /** 2 * 获取正确缩放裁剪适应IamgeView的Bitmap 3 * @param imageView 4 * @param bitmap 5 * @return 6 */ 7 public static Bitmap createFitBitmap(ImageView imageView, Bitmap bitmap) { 8 Log.i(TAG, "createFitBitmap<---------------------"); 9 int widthTarget = imageView.getWidth(); 10 int heightTarget = imageView.getHeight(); 11 int widthBitmap = bitmap.getWidth(); 12 int heightBitmap = bitmap.getHeight(); 13 Log.i(TAG, "widthTarget = " + widthTarget ); 14 Log.i(TAG, "heightTarget = " + heightTarget ); 15 Log.i(TAG, "widthBitmap = " + widthBitmap ); 16 Log.i(TAG, "heightBitmap = " + heightBitmap ); 17 Bitmap result = null; 18 if( widthBitmap >= widthTarget && heightBitmap >= heightTarget ){ 19 result = createLargeToSmallBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); 20 } 21 else if( widthBitmap >= widthTarget && heightBitmap < heightTarget ){ 22 Bitmap temp = createLargeWidthToEqualHeightBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); 23 result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp); 24 } 25 else if( widthBitmap < widthTarget && heightBitmap >= heightTarget ){ 26 Bitmap temp = createLargeHeightToEqualWidthBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); 27 result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp); 28 } 29 else{ 30 Bitmap temp = createSmallToEqualBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap); 31 result = createFitBitmap(imageView, temp); 32 } 33 Log.i(TAG, "createFitBitmap--------------------->"); 34 return result; 35 } 36 37 38 39 private static Bitmap createLargeToSmallBitmap( int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ 40 Log.i(TAG, "createLargeToSmallBitmap<---------------------"); 41 Log.i(TAG, "widthTarget = " + widthTarget ); 42 Log.i(TAG, "heightTarget = " + heightTarget ); 43 Log.i(TAG, "widthBitmap = " + widthBitmap ); 44 Log.i(TAG, "heightBitmap = " + heightBitmap ); 45 int x = (widthBitmap - widthTarget) / 2; 46 int y = (heightBitmap - heightTarget) / 2; 47 Log.i(TAG, "createLargeToSmallBitmap--------------------->"); 48 return Bitmap.createBitmap(bitmap, x, y, widthTarget, heightTarget); 49 } 50 51 private static Bitmap createLargeWidthToEqualHeightBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ 52 53 Log.i(TAG, "createLargeWidthToEqualHeightBitmap<---------------------"); 54 Log.i(TAG, "widthTarget = " + widthTarget ); 55 Log.i(TAG, "heightTarget = " + heightTarget ); 56 Log.i(TAG, "widthBitmap = " + widthBitmap ); 57 Log.i(TAG, "heightBitmap = " + heightBitmap ); 58 double scale = ( heightTarget * 1.0 ) / heightBitmap; 59 Log.i(TAG, "createLargeWidthToEqualHeightBitmap--------------------->"); 60 return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale) , heightTarget, false); 61 } 62 63 private static Bitmap createLargeHeightToEqualWidthBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ 64 65 Log.i(TAG, "createLargeHeightToEqualWidthBitmap<---------------------"); 66 Log.i(TAG, "widthTarget = " + widthTarget ); 67 Log.i(TAG, "heightTarget = " + heightTarget ); 68 Log.i(TAG, "widthBitmap = " + widthBitmap ); 69 Log.i(TAG, "heightBitmap = " + heightBitmap ); 70 double scale = ( widthTarget * 1.0 ) / widthBitmap; 71 Log.i(TAG, "createLargeHeightToEqualWidthBitmap--------------------->"); 72 return Bitmap.createScaledBitmap(bitmap, widthTarget , (int)(heightTarget * scale), false); 73 } 74 75 private static Bitmap createSmallToEqualBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){ 76 77 Log.i(TAG, "createSmallToEqualBitmap<---------------------"); 78 Log.i(TAG, "widthTarget = " + widthTarget ); 79 Log.i(TAG, "heightTarget = " + heightTarget ); 80 Log.i(TAG, "widthBitmap = " + widthBitmap ); 81 Log.i(TAG, "heightBitmap = " + heightBitmap ); 82 double scaleWidth = ( widthTarget * 1.0 ) / widthBitmap; 83 double scaleHeight = ( heightTarget * 1.0 ) / heightBitmap; 84 double scale = Math.min(scaleWidth, scaleHeight); 85 Log.i(TAG, "createSmallToEqualBitmap--------------------->"); 86 return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale), (int)(heightBitmap * scale), false); 87 }
时间: 2024-10-07 18:32:48