适配各种分辨率的图片切圆方法
项目中有这样的需求,需要把服务器传来的用户头像,切成圆形,放到一个大小位置确定的环形阴影区域内。
把网上有现成的工具类,我组合了一下,如下:
1 import android.content.Context; 2 import android.graphics.Bitmap; 3 import android.graphics.Canvas; 4 import android.graphics.Matrix; 5 import android.graphics.Paint; 6 import android.graphics.PorterDuffXfermode; 7 import android.graphics.Rect; 8 import android.graphics.RectF; 9 import android.graphics.Bitmap.Config; 10 import android.graphics.PorterDuff.Mode; 11 import android.util.Log; 12 13 public class ImageHelper { 14 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { 15 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap 16 .getHeight(), Config.ARGB_8888); 17 Canvas canvas = new Canvas(output); 18 19 final int color = 0xff424242; 20 final Paint paint = new Paint(); 21 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 22 final RectF rectF = new RectF(rect); 23 final float roundPx = pixels; 24 25 paint.setAntiAlias(true); 26 canvas.drawARGB(0, 0, 0, 0); 27 paint.setColor(color); 28 canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 29 30 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 31 canvas.drawBitmap(bitmap, rect, rect, paint); 32 33 return output; 34 } 35 36 public static Bitmap getBitmapByPix(Bitmap bm,Context context) { 37 38 // 获得图片的宽高 39 int width = bm.getWidth(); 40 int height =bm.getHeight(); 41 Log.e("bm.getWidth()", bm.getWidth()+""); 42 // 设置想要的大小 43 int newWidth = dip2px(context, 66); 44 int newHeight = dip2px(context, 66);//66dp是自己想要的大小,大家随意 45 46 47 // 计算缩放比例 48 float scaleWidth = ((float) newWidth) / width; 49 float scaleHeight = ((float) newHeight) / height; 50 51 // 取得想要缩放的matrix参数 52 Matrix matrix = new Matrix(); 53 matrix.postScale(scaleWidth, scaleHeight); 54 55 // 得到新的图片 56 return Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true); 57 58 59 } 60 61 /** 62 * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 63 */ 64 public static int dip2px(Context context, float dpValue) { 65 final float scale = context.getResources().getDisplayMetrics().density; 66 67 return (int) (dpValue * scale + 0.5f); 68 } 69 70 /** 71 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 72 */ 73 public static int px2dip(Context context, float pxValue) { 74 final float scale = context.getResources().getDisplayMetrics().density; 75 return (int) (pxValue / scale + 0.5f); 76 } 77 }
从使用情况上来说,可以考虑先切圆再缩放,最好图是正方形的效果最佳。
ps:dp=dip 适配的时候用这个参数哦
px是pixel 即像素
版权声明:本文为huangquanhj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。