我有一些显示图像的麻烦,有人可以帮助我吗? - 我有一个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(),所以设置像背景这样的位图有什么想法吗?
由于
答案 0 :(得分:0)
您可以使用此资产工作室生成组织到正确的Drawable文件夹中的一整套正确大小的图像。生成后,您只需下载zip,解压缩文件夹并将其放置在应用层次结构中。