ฉันใช้ Picasso และมีปัญหาเดียวกัน รูปภาพมีขนาดใหญ่เกินไปอย่างน้อยก็ในขนาดความกว้างหรือความสูง ในที่สุดฉันก็พบทางออกที่นี่ คุณสามารถลดขนาดภาพใหญ่ตามขนาดการแสดงผลและรักษาอัตราส่วน:
public Point getDisplaySize(Display display) {
Point size = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
display.getSize(size);
} else {
int width = display.getWidth();
int height = display.getHeight();
size = new Point(width, height);
}
return size;
}
และใช้วิธีนี้ในการโหลดภาพโดย Picasso:
final Point displySize = getDisplaySize(getWindowManager().getDefaultDisplay());
final int size = (int) Math.ceil(Math.sqrt(displySize.x * displySize.y));
Picasso.with(this)
.load(urlSource)
.resize(size, size)
.centerInside()
.into(imageViewd);
เพื่อประสิทธิภาพที่ดียิ่งขึ้นคุณสามารถดาวน์โหลดภาพตามความกว้างและความสูงของหน้าจอแสดงผลได้ไม่รวมภาพทั้งหมด:
public String reviseImageUrl(final Integer displayWidth, final Integer displayHeight,
final String originalImageUrl) {
final String revisedImageUrl;
if (displayWidth == null && displayHeight == null) {
revisedImageUrl = originalImageUrl;
} else {
final Uri.Builder uriBuilder = Uri.parse(originalImageUrl).buildUpon();
if (displayWidth != null && displayWidth > 0) {
uriBuilder.appendQueryParameter(QUERY_KEY_DISPLAY_WIDTH, String.valueOf(displayWidth));
}
if (displayHeight != null && displayHeight > 0) {
uriBuilder.appendQueryParameter(QUERY_KEY_DISPLAY_HEIGHT, String.valueOf(displayHeight));
}
revisedImageUrl = uriBuilder.toString();
}
return revisedImageUrl;
}
final String newImageUlr = reviseImageUrl(displySize.x, displySize.y, urlSource);
แล้ว:
Picasso.with(this)
.load(newImageUlr)
.resize(size, size)
.centerInside()
.into(imageViewd);
แก้ไข: getDisplaySize ()
display.getWidth()/getHeight()
เลิกใช้แล้ว แทนการใช้งานDisplay
DisplayMetrics
public Point getDisplaySize(DisplayMetrics displayMetrics) {
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
return new Point(width, height);
}