Dường như bạn không tạo ra Bitmap đúng, nhưng nếu tôi ở vị trí của bạn tôi sẽ tạo ra một bitmap quy mô như vậy:
public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
// CREATE A MATRIX FOR THE MANIPULATION
Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);
// "RECREATE" THE NEW BITMAP
Bitmap resizedBitmap = Bitmap.createBitmap(
bm, 0, 0, width, height, matrix, false);
bm.recycle();
return resizedBitmap;
}
Sau đó đặt nó vào một IMAGExem như vậy:
mImg.setImageBitmap(img);
nhìn chung nó sẽ trông như thế này:
public void loadImage() {
Picasso.with(getBaseContext()).load("image url").into(new Target() {
// ....
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom arg1) {
// Pick arbitrary values for width and height
Bitmap resizedBitmap = getResizedBitmap(bitmap, newWidth, newHeight);
mImageView.setBitmap(resizedBitmap);
}
// ....
});
}
}
public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
// CREATE A MATRIX FOR THE MANIPULATION
Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);
// "RECREATE" THE NEW BITMAP
Bitmap resizedBitmap = Bitmap.createBitmap(
bm, 0, 0, width, height, matrix, false);
bm.recycle();
return resizedBitmap;
}
Nhưng tôi hỏi bạn sử dụng Target
hoàn toàn, thường là cho một trường hợp rất chuyên ngành. Bạn nên gọi singleton của Picasso
trong cùng một lớp, bạn sẽ được hiển thị hình ảnh. Thông thường đây là trong một Adapter
(RecyclerView Adaptor có thể) như sau:
Picasso.with(mContext)
.load("image url")
.into(mImageView);
Cảm ơn, tôi đã có phương pháp tại chỗ cho thay đổi kích thước (http://developer.android.com/training/displaying-bitmaps/load-bitmap .html). Tôi chỉ cần tải một hình ảnh từ một URL vào một Bitmap (không trực tiếp vào một ImageView), tìm ra từ các ý kiến ở trên. Cảm ơn rất nhiều. – Alex
Tại sao bạn sử dụng tác vụ không đồng bộ để tải hình ảnh. Bạn chỉ có thể thực hiện một cuộc gọi lại trong .into (mImageView, gọi lại mới <> {...}); – AndyRoid
Trên thực tế, tôi đã cố gắng một cách nhanh chóng để tải một hình ảnh vào một bitmap mà sau đó sẽ được thực sự thông qua một Adapter (RecycleView), thay vì tải nó từ thư mục tài nguyên. Tôi đang cố gỡ lỗi một vấn đề được mô tả tại đây http://stackoverflow.com/questions/32554358/encountering-lag-when-updating-a-cardview-item-in-a-recycleview. Có lẽ tôi sẽ thử tải hình ảnh trong lớp nơi nó sẽ được hiển thị. Nhưng tôi mặc dù Picasso chỉ có thể được sử dụng trong một lớp học hoạt động, hoặc ít nhất đó là những gì tôi hiểu từ một số bài viết. Và tôi đoán tôi cần phải vượt qua bối cảnh đến lớp Adapter, phải không? – Alex