如何提高回收器视图中的图像滚动性能(在回收器视图中滚动期间应用程序滞后)



我正在制作音乐播放器。 因此,在相册部分,我尝试加载毕加索图书馆的相册图像。 图像加载正确,但是当我滚动时,会出现应用程序滞后问题。我也尝试滑行,但性能没有提高。我认为此问题是由于此链接的图像加载而发生的 "content://media/external/audio/albumart"。 如果没有,是否有其他方法可以提高滚动性能..??

public class Song_Adapter extends 
RecyclerView.Adapter<Song_Adapter.MyViewHolder> implements 
FastScrollRecyclerView.SectionedAdapter {

ArrayList<Song_base> song_info;
Context context;
LayoutInflater inflater;
LayoutInflater inflater1;
Home home;
AlertDialog.Builder dialog;
AlertDialog dg;
TextView remove,play,search,send,set_ringtone,detail;
DatabaseHelperAdapter helper;

public Song_Adapter(ArrayList<Song_base> song_info, Context context) {
    this.song_info = song_info;
    this.context = context;
    inflater = LayoutInflater.from(context);
    inflater1 = LayoutInflater.from(context);
}
@Override
public Song_Adapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = inflater.inflate(R.layout.recycler_song_layout, parent, false);
    return new Song_Adapter.MyViewHolder(v);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) 
 {
    final Song_base song = song_info.get(position);
    holder.song_name.setText(song.getSong_name());
    holder.artist.setText(song.getArtist());
    holder.duration.setText(Constants.calculatetime(Integer.parseInt(
    song.getDuration())));

     getimageart(song.getAlbumId(), song.getContext(), holder.bannerp 

}

@Override
public int getItemCount() {
    return song_info.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
    TextView song_name, artist,duration;
    CardView cardView;
    Button play;
    ImageView bannerp;
    RelativeLayout relativeLayout;
    public MyViewHolder(View itemView) {
        super(itemView);
        song_name = itemView.findViewById(R.id.song_name);
        artist = itemView.findViewById(R.id.artist);
        cardView = itemView.findViewById(R.id.cardview);
        bannerp = itemView.findViewById(R.id.small_banner);
        relativeLayout = itemView.findViewById(R.id.cardrelative);
        duration = itemView.findViewById(R.id.duration);
    }

}
public static void getimageart(Long albumId,Context context,ImageView image) {
    Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
    Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId);

    Bitmap bitmapimage = null;
    try {
        bitmapimage = MediaStore.Images.Media.getBitmap(
                context.getContentResolver(), albumArtUri);
    }
    catch (Exception exception) {
        exception.printStackTrace();
    }
    if(bitmapimage!=null)
    {
        Picasso.with(context)
                .load(Uri.parse(String.valueOf(albumArtUri)))
                .resize(200,200)
                .centerInside()
                .into(image);
    }

}

}

使用回收器视图缓存,这将帮助你

recyclerView.setItemViewCacheSize(25);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

使用 fit((

Picasso.with(context)
            .load(Uri.parse(String.valueOf(albumArtUri)))
            .resize(200,200)
            .fit()
            .centerCrop()
            .into(image);

fit(( 实际上调整图像大小以适应图像视图的边界。这不会加载完整图像并平滑滚动。

最新更新