Android RecycleView AsyncTask加载图片

时间:2015-11-01 09:45:48

标签: android bitmap android-asynctask android-recyclerview

我正在使用照片库制作应用,并且我有RecycleView来显示这些照片。有很多问题,但我解决了很多问题。我添加了AsyncTask来加载照片。

class BitmapWorkerTask extends AsyncTask<File, Void, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private File data = null;

    public BitmapWorkerTask(ImageView imageView) {
        // Use a WeakReference to ensure the ImageView can be garbage collected
        imageViewReference = new WeakReference<ImageView>(imageView);
    }

    // Decode image in background.
    @Override
    protected Bitmap doInBackground(File... params) {
        data = params[0];
        return load();
    }

    // Once complete, see if ImageView is still around and set bitmap.
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

现在,我遇到了快速滚动的问题。如果我们已经跳过一些照片,我不想设置图像。 我在Android文档上找到了这个文档(http://developer.android.com/training/improving-layouts/smooth-scrolling.html) 我想实现这个

 if (v.position == position) {
        // If this item hasn't been recycled already, hide the
        // progress and set and show the image
    ...
    }

但我不知道什么是v.position,如何设置它,什么是位置以及如何从RecyclerView获取它。你能帮我解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果我们已经跳过一些照片

,我不想setImage

要实现此次传递,请将RecyclerView的LinearLayoutManager及当前位置传递给AsyncTask

getLayoutManager()

public BitmapWorkerTask(ImageView imageView,LinearLayoutManager layoutManager,int viewPosition) {
    // Use a WeakReference to ensure the ImageView can be garbage collected
    imageViewReference = new WeakReference<ImageView>(imageView);
    this.layoutManager = layoutManager;
    this.position = viewPosition;
}

在PostExecute中执行此操作

 protected void onPostExecute(Bitmap bitmap) {
  if(position >= layoutManager.findFirstVisibleItemPosition() && position <= layoutManager.findLastVisibleItemPosition()){
    if (imageViewReference != null && bitmap != null) {
        final ImageView imageView = imageViewReference.get();
        if (imageView != null) {
            imageView.setImageBitmap(bitmap);
        }
    }
  }
}

但我不知道什么是v.position,如何设置它,什么是位置以及如何从RecyclerView获取它。

我在这里无法理解你的问题,但是如果你的意思是用视图存储位置,那么你可以使用view.setTag()来存储位置