मैंने पिकासो का उपयोग किया और उसी समस्या थी। कम से कम आकार, चौड़ाई या ऊंचाई में छवि बहुत बड़ी थी। आखिरकार मुझे इसका हल मिल गया। आप बड़े आकार को डिस्प्ले साइज के अनुसार घटा सकते हैं और पहलू अनुपात भी रख सकते हैं:
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;
}
और पिकासो द्वारा छवि लोड करने के लिए इस विधि का उपयोग करें:
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);
}