/*** 对图片根据手机宽高进行等比例拉伸* @param activity* @param view* @param drawableResId*/public static void scaleImage(final Activity activity, final View view, int drawableResId) {// 获取屏幕的高宽Point outSize = new Point();activity.getWindow().getWindowManager().getDefaultDisplay().getSize(outSize);// 解析将要被处理的图片Bitmap resourceBitmap = BitmapFactory.decodeResource(activity.getResources(), drawableResId);if (resourceBitmap == null) {return;}// 开始对图片进行拉伸或者缩放// 使用图片的缩放比例计算将要放大的图片的高度int bitmapScaledHeight = Math.round(resourceBitmap.getHeight() * outSize.x * 1.0f / resourceBitmap.getWidth());// 以屏幕的宽度为基准,如果图片的宽度比屏幕宽,则等比缩小,如果窄,则放大final Bitmap scaledBitmap = Bitmap.createScaledBitmap(resourceBitmap, outSize.x, bitmapScaledHeight, false);view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {//这里防止图像的重复创建,避免申请不必要的内存空间if (scaledBitmap.isRecycled())//必须返回truereturn true;// 当UI绘制完毕,我们对图片进行处理int viewHeight = view.getMeasuredHeight();// 计算将要裁剪的图片的顶部以及底部的偏移量int offset = (scaledBitmap.getHeight() - viewHeight) / 2;// 对图片以中心进行裁剪,裁剪出的图片就是非常适合做引导页的图片了Bitmap finallyBitmap = Bitmap.createBitmap(scaledBitmap, 0, offset, scaledBitmap.getWidth(),scaledBitmap.getHeight() - offset * 2);if (!finallyBitmap.equals(scaledBitmap)) {//如果返回的不是原图,则对原图进行回收scaledBitmap.recycle();System.gc();}// 设置图片显示view.setBackgroundDrawable(new BitmapDrawable(activity.getResources(), finallyBitmap));return true;}});}
如果觉得《对图片进行等比例拉伸》对你有帮助,请点赞、收藏,并留下你的观点哦!