【问题标题】:Recyclerview Images Misplacing and disappear while scrolling up/downRecyclerview 图像在向上/向下滚动时放错位置并消失
【发布时间】:2023-03-09 15:52:01
【问题描述】:

我正在检索视频缩略图并将其显示在回收视图的图像视图中,我面临的问题是图像在向上/向下滚动时被放错位置并消失。当我使用可运行类时,Recyclarview 会冻结。

private static Bitmap retrieveVideoFrameFromVideo(String videoPath) {
Bitmap bitmap = null;
MediaMetadataRetriever mediaMetadataRetriever = null;
try {
  mediaMetadataRetriever = new MediaMetadataRetriever();
  if (Build.VERSION.SDK_INT >= 14) {
    mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
  } else {
    mediaMetadataRetriever.setDataSource(videoPath);
  }
  //   mediaMetadataRetriever.setDataSource(videoPath);
  bitmap = mediaMetadataRetriever.getFrameAtTime();
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (mediaMetadataRetriever != null) {
    mediaMetadataRetriever.release();
  }
}
return bitmap;
 }

 @Override void bindData(RecyclerView.ViewHolder holder, final MediaResponse  data) {
final PhotoHolder photoHolder = (PhotoHolder) holder;
photoHolder.mTitle.setText(BasicUtils.removeDoubleQuotes(data.getTitle()));
photoHolder.mPostedBy.setText(data.getPostedby());
photoHolder.upvote.setText(String.valueOf(data.getLikes()));
photoHolder.date.setText(
        BasicUtils.parseDate(data.getDatetime(),  AppConstantsUtils.FROM_DATE_FORMAT,
                AppConstantsUtils.TO_DATE_FORMAT));


new BackTask(photoHolder.mMediaPic).execute(
       AppConstantsUtils.BASE_URL + data.getMedia());




 }

 private class BackTask extends AsyncTask<String, Void, Bitmap> {
  private ImageView imageView;
  BackTask(ImageView imageView) {
  this.imageView = imageView;
}

   @Override protected Bitmap doInBackground(String... params) {
  // return retrieveVideoFrameFromVideo(params[0]);
  Log.d("URLHARRY",params[0]);
  // return ThumbnailUtils.createVideoThumbnail(params[0],            MediaStore.Video.Thumbnails.MINI_KIND );
  return retrieveVideoFrameFromVideo(params[0]);
}

  @Override protected void onPostExecute(Bitmap bitmap) {
  super.onPostExecute(bitmap);

  if(bitmap!=null) {
    imageView.setImageBitmap(bitmap);
  }
  else{
    imageView.setImageBitmap(null);
    ToastUtils.showToast(context,"Hai");
  }

 }

【问题讨论】:

  • 添加BackTask类代码?
  • 滚动时你会得到空白我的意思是一个项目+空间到设备的最大高度吗?
  • 添加在@SohailZahid 下方
  • 不,在滚动过程中,我加载的图像消失并更改为另一个位置@AshwinMothilal

标签: android android-recyclerview imageview thumbnails


【解决方案1】:

在 Viewholder 中使用 AsynTask

 new AsyncTask<String, String, String>() {
    Bitmap bitmapVideo;
    String location;


    @Override
    protected String doInBackground(String... strings) {
      try {
        //Your method call here
        bitmapVideo = retrieveVideoFrameFromVideo(strings[0]);
        location=strings[0];
        //  addBitmapToMemoryCache(location, bitmapVideo);

      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
      return null;
    }

    @Override
    protected void onPostExecute(String id) {
      super.onPostExecute(id);

      if (bitmapVideo != null) {
        //Load your bitmap here
        photoHolder.mMediaPic.setImageBitmap(bitmapVideo);
        addBitmapToMemoryCache(location, bitmapVideo);


      } else {
        Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ananda);
        photoHolder.mMediaPic.setImageBitmap(largeIcon);
        addBitmapToMemoryCache(location, largeIcon);

      }
    }
  }.execute(AppConstantsUtils.BASE_URL + data.getMedia());

【讨论】:

    【解决方案2】:

    尝试使用picassoRecyclerView 中加载图像。您面临的问题是因为 recyclerview 回收了 onBindView 方法中的视图。因此,您需要保留一周对这些对象的引用。毕加索做得很完美。 (它还回收你的位图:))

    【讨论】:

    • 这是视频缩略图,毕加索不支持从视频中下载视频缩略图
    • 能不能加这个方法retrieveVideoFrameFromVideo(params[0]);定义
    • 不不,添加你提到的方法。 onBackground中的return语句之后的那个@
    【解决方案3】:

    在您的bindData 方法中,您需要添加这一行

    photoHolder.setIsRecyclable(false);
    

    【讨论】:

      【解决方案4】:

      你可以使用picasso从url下载图片,并设置在recyclerview项下的image中。

      毕加索.with(上下文) .load(网址) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);

      http://square.github.io/picasso/

      【讨论】:

      • 这是视频缩略图,毕加索不支持从视频中下载视频缩略图
      • 要管理视频缩略图,您必须管理字符串和位图类型的哈希图。字符串保存项目图像的位置,位图保存视频缩略图。
      • 如果你把示例代码发给我会很有帮助,@Aashutosh
      猜你喜欢
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多