安卓图片适配(拉伸)

假设有一个400*400的图片,在手机上要全屏显示,手机屏幕是1024*1920的,无法等比例拉伸,可以用下面方法:

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() {
        @Override
        public boolean onPreDraw() {
            //这里防止图像的重复创建,避免申请不必要的内存空间
            if (scaledBitmap.isRecycled())
                //必须返回true
                return 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;
        }
    });
}

你可能感兴趣的:(安卓图片适配(拉伸))