我按照此处Android Smooth Scrolling 的说明进行了平滑滚动,但onPostExecute上的方法setImageBitmap仍然冻结了我的列表视图。这是我的异步任务代码
private static class ThumbnailTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public ThumbnailTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
@Override
protected Bitmap doInBackground(Integer... params) {
Bitmap image = fragment.getAlbum().getPhotos().get(params[0]).getImage(Utils.THUMBNAIL_SCREEN_SIZE);
return ThumbnailUtils.extractThumbnail(image, 40, 40);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
以下是我在getView方法中使用它的方法
new ThumbnailTask(holder.image).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, position);
长进程是来自doInBackground方法的“getImage”,我只是将图像放在onPostExecute上的ImageView上。如果我对setImageBitmap发表评论,则滚动再次变得平滑。我做错了什么?
答案 0 :(得分:0)
我认为您需要在异步任务中使用get()。我认为当你注释掉这一行时,你无法看到获取的负面影响:
imageView.setImageBitmap(bitmap);
但这不是问题。
我推荐这个:
private static class ThumbnailTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private final ImageView yourImageView = null;
public ThumbnailTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
@Override
protected Bitmap doInBackground(Integer... params) {
Bitmap image = fragment.getAlbum().getPhotos().get(params[0]).getImage(Utils.THUMBNAIL_SCREEN_SIZE);
return ThumbnailUtils.extractThumbnail(image, 40, 40);
if (imageViewReference != null) {
yourImageView = imageViewReference.get();
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}