我有一个带有cardview的recyclerview。还有imageview,textview。我正在使用Base64解码方案解码我的图像并在cardview中显示图像。它加载图像但产生滞后效应
onBindViewHolder代码
holder.iv_contestant_image.setImageBitmap(new ProcessImage().getBitmage(contestant.getContestant_image()));
ProcessImage代码
byte[] decodedString = Base64.decode(strBitmap, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
return decodedByte;
我做错了吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
我确实认为解码过程不是即时的,具体取决于位图的大小。因此,尝试使用AsyncTask执行解码位图
class BitmapWorkerTask extends AsyncTask<Void, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private String base64Img;
public BitmapWorkerTask(ImageView imageView, String base64Img) {
imageViewReference = new WeakReference<ImageView>(imageView);
this.base64Img = base64Img;
}
@Override
protected Bitmap doInBackground(Void... params) {
byte[] decodedString = Base64.decode(base64Img, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
return decodedByte;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
imageViewReference.get().setImageBitmap(bitmap);
}
}
在onBindViewHolder中
new BitmapWorkerTask(holder.iv_contestant_image, stringBitmap).execute();
答案 2 :(得分:0)
您可以在循环视图中实施延迟图像加载以解决此问题。 http://blogs.innovationm.com/lazy-loading-and-memory-management-of-images-in-listview-in-android/