RecyclerView在滚动方面滞后

时间:2016-10-27 04:59:02

标签: java android android-recyclerview

我有一个带有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;

我做错了吗?

3 个答案:

答案 0 :(得分:1)

您可以使用任何图像加载库。一些库是Picasso Glide Fresco

答案 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/

相关问题