我有 60 张图片用于我的应用程序。每张图片的大小只有(大约)25KB。我对大写使用单字母命名约定,对小写使用双字母。
一个.png
aa.png
在我的布局中,我有 10 个 ImageView,并且我根据从数据库中提取的单词以编程方式设置图像位图。
我的问题是,我可能没有正确实施下采样。我将所有 10 个 ImageView 添加到一个 ImageView 数组中,然后根据数据库中单词的字符数组找到它们来设置它们的位图值。这是我设置图像视图的方法:
for(int j = 0; j < myWord.length(); j++){
char[] chars = myWord.toCharArray();
if(Character.isUpperCase(chars[j])){
int imgID = getResources().getIdentifier(String.valueOf(chars[j]).toLowerCase(), "drawable", getPackageName());
letters[j].setTag(String.valueOf(chars[j]).toUpperCase());
letters[j].setImageBitmap(CalculateSize.decodeSampledBitmapFromResource(getResources(), imgID, 75, 75));
}else if(Character.isLowerCase(chars[j])){
int imgID = getResources().getIdentifier(String.valueOf(chars[j]) + String.valueOf(chars[j]), "drawable", getPackageName());
letters[j].setTag(chars[j] + chars[j]);
letters[j].setImageBitmap(CalculateSize.decodeSampledBitmapFromResource(getResources(),imgID, 75, 75));
}
这是我调整大小的方法。我让它适用于带有inSampleSize = 4
设置的 3 个字母的单词。但是,无论我将它设置为什么,我都无法让它再次工作:
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight){
// Height and Width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 12;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose smallest ratio as inSampleSize value.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resID, int reqWidth, int reqHeight){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resID, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resID, options);
}
}