আমি পিকাসো ব্যবহার করেছি এবং একই সমস্যা ছিল। চিত্রটি কমপক্ষে আকার, প্রস্থ বা উচ্চতায় খুব বড় ছিল। অবশেষে আমি সমাধানটি এখানে পেয়েছি। আপনি প্রদর্শন আকার অনুযায়ী বৃহত চিত্র নিচে স্কেল করতে এবং দিক অনুপাতও রাখতে পারেন:
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);
}