为 XXHDPI 调整图像大小
Resizing image for XXHDPI
我有一张图片可以完美地显示在 MDPI 中。
它的分辨率是191 x 255.
然后我将它调整为 XXDPI,使用 1:3 比例,它变为 573 x 765
。
尽管如此,当模拟器显示它时,质量还是不如 MDPI。
明显变差了。
对于这两种情况,我都在使用它Wrap Content
如果我在图片编辑器上显示两张图片,它们的质量都很好。
为什么会这样?我在这里遗漏了什么吗?
您可以添加 android:scaleType=" ... " 在您想要显示的图像上
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
float widthDpi = metrics.xdpi;
float heightDpi = metrics.ydpi;
float widthInches = widthPixels / widthDpi;
float heightInches = heightPixels / heightDpi;
double diagonalInches = Math.sqrt((widthInches * widthInches) + (heightInches * heightInches)); // this code returns the actual screen size (eg. 7,8,9,10 inches in double format ex: 7.932189832)
diagonalInches = (double) Math.round(diagonalInches * 10) / 10; // round up to first decimal places
ArrayList<Integer> imageId = new ArrayList<>();
imageId.clear();
for (Integer i : imageNum){ // uses loop since im using TransitionDrawable to change images in single view
String stringID;
if (isPortrait) {
stringID = "featured_img_" + i.toString() + "_port"; // portrait images
} else {
if (diagonalInches >= 7 && diagonalInches <=8){
stringID = "featured_img_" + i.toString() + "_land_b"; // landscape images this is the drawable filename
} else {
stringID = "featured_img_" + i.toString() + "_land_a"; //landscape images this is the drawable filename
}
}
int drawableId = getResId(stringID);
imageId.add(drawableId); // adding it to arraylist
}
我有一张图片可以完美地显示在 MDPI 中。
它的分辨率是191 x 255.
然后我将它调整为 XXDPI,使用 1:3 比例,它变为 573 x 765
。
尽管如此,当模拟器显示它时,质量还是不如 MDPI。
明显变差了。
对于这两种情况,我都在使用它Wrap Content
如果我在图片编辑器上显示两张图片,它们的质量都很好。 为什么会这样?我在这里遗漏了什么吗?
您可以添加 android:scaleType=" ... " 在您想要显示的图像上
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
float widthDpi = metrics.xdpi;
float heightDpi = metrics.ydpi;
float widthInches = widthPixels / widthDpi;
float heightInches = heightPixels / heightDpi;
double diagonalInches = Math.sqrt((widthInches * widthInches) + (heightInches * heightInches)); // this code returns the actual screen size (eg. 7,8,9,10 inches in double format ex: 7.932189832)
diagonalInches = (double) Math.round(diagonalInches * 10) / 10; // round up to first decimal places
ArrayList<Integer> imageId = new ArrayList<>();
imageId.clear();
for (Integer i : imageNum){ // uses loop since im using TransitionDrawable to change images in single view
String stringID;
if (isPortrait) {
stringID = "featured_img_" + i.toString() + "_port"; // portrait images
} else {
if (diagonalInches >= 7 && diagonalInches <=8){
stringID = "featured_img_" + i.toString() + "_land_b"; // landscape images this is the drawable filename
} else {
stringID = "featured_img_" + i.toString() + "_land_a"; //landscape images this is the drawable filename
}
}
int drawableId = getResId(stringID);
imageId.add(drawableId); // adding it to arraylist
}