调整图像大小以存储在可绘制文件夹中

时间:2016-08-06 21:24:04

标签: android

我有一些显示图像的麻烦,有人可以帮助我吗? - 我有一个listView,我想在这个列表的每个项目中显示一个不同的图像(在后台),好吧,我的图像的分辨率非常大(例如6016x2188px),然后我必须调整它们的大小,由:

public static int getInSampleSize(BitmapFactory.Options opt, int reqWidth, int reqHeight) {

        final int imgWidth = opt.outWidth;//rec a larg orig da img
        final int imgHeight = opt.outHeight;//rec a alt orig da img
        int inSampleSize = 1;

        LogUtil.logD(LogUtil.LOG_TAG, "Img Alt -> %s | Img Larg -> %s", String.valueOf(imgHeight), String.valueOf(imgWidth));

        if (imgWidth > reqWidth || imgHeight > reqHeight) {
            final int halfHeight = imgHeight / 2;
            final int halfWidth = imgWidth / 2;

            while ((halfHeight / inSampleSize) > reqHeight &&
                    (halfWidth / inSampleSize) > reqWidth) {

                inSampleSize *= 2;
            }

            long totalPixels = imgWidth * imgHeight / inSampleSize;

            final long totalReqPixelsCap = reqWidth * reqHeight * 2;

            while (totalPixels > totalReqPixelsCap) {
                inSampleSize *= 2;
                totalPixels /= 2;
            }
        }

        LogUtil.logD(LogUtil.LOG_TAG, "Img inSampleSize -> %s", String.valueOf(inSampleSize));
        return inSampleSize;
    }


public static Bitmap getSampleBitmap(Context ctx, int imgId, int reqWidth, int reqHeight) {

        final BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inJustDecodeBounds = true;

        Resources res = ctx.getResources();

        BitmapFactory.decodeResource(res, imgId, opt);

        opt.inSampleSize = getInSampleSize(opt, reqWidth, reqHeight);

        opt.inJustDecodeBounds = false;

        LogUtil.logD(LogUtil.LOG_TAG, "Decode bitmap...");
        return BitmapFactory.decodeResource(res, imgId, opt);
    }

//each row in adapter
txtview.setBackgroundDrawable(new BitmapDrawable(ctx.getResources(), getSampleBitmap(ctx, R.drawable.img, txtview.getWidth(), txtview.getHeight())));

好的,它有效,但我的应用程序显示时间间隔的图像,这使应用程序非常奇怪。

然后有人说我必须将已经调整大小的图像存储在可绘制的文件夹中,但是我知道如果android处理dp我需要调整多少像素,这个dp可以变成不同的数量像素取决于每个设备的分辨率? (我想只存储一个xxdpi,应用程序不会那么大)

如果我将它们调整为800px的宽度(平板电脑10和#34的最佳质量),这将适用于所有其他分辨率吗?

顺便说一下,不推荐使用.setBackgroundDrawable(),所以设置像背景这样的位图有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用此资产工作室生成组织到正确的Drawable文件夹中的一整套正确大小的图像。生成后,您只需下载zip,解压缩文件夹并将其放置在应用层次结构中。

https://romannurik.github.io/AndroidAssetStudio/icons-generic.html#source.space.trim=1&source.space.pad=0&size=24&padding=8&color=33b5e5%2C100&name=ic_example