Лучше всего использовать AsyncTask.
В фоновом режиме вы будете загружать изображения, а в пост-выполнении вы будете раздувать различные виды с изображениями, я использую этов моем проекте и прокрутка действительно плавная, как это происходит в фоновом режиме, когда я прокручиваю, он начнет заполнять представления
Посмотрите, я использую это для плавного заполнения изображений
private class CargarImg extends AsyncTask<Void, Void, Void> {
private final int mPosition;
private final MyViewHolder mHolder;
private String mStringTexto;
private Drawable mDrawableIcono;
public CargarImg(int position, MyViewHolder holder) {
mPosition = position;
mHolder = holder;
}
@Override
protected Void doInBackground(Void... voids) {
Bitmap mBitmap;
try{
mStringTexto = json.getNombre(mArrayData.get(mPosition));
mDrawableIcono= json.getIcono(mArrayData.get(mPosition));
mBitmap = ThumbnailUtils.extractThumbnail(((BitmapDrawable)mDrawableIcono).getBitmap(),150,150);
mDrawableIcono = new BitmapDrawable(mContext.getResources(), mBitmap);
}catch (Exception e){
somethingHappened(mContext, "can't reach the photo");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mHolder.build(mStringTexto,mDrawableIcono);
mHolder.imageView.setBackgroundColor(cargarColor(json.getTipo(mArrayData.get(mPosition))));
}
}
Как вы можете видеть, я загружаю изображения во время прокрутки, поэтому, поскольку я не загружаю их все сразу, он не замораживает поток пользовательского интерфейса, и вы можете прокручивать, и изображения будутзагрузка, это всего лишь подсказка для вас из моего кода, но я действительно предлагаю вам использовать AsyncTask.
А это мои bindViewHolder
и viewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(mLayoutResourceId, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
new CargarImg(position,holder).execute(); //here i execute the async to load the images smoothly
}
Немногоподробнее:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView letterText;
public ImageView imageView;
private MyViewHolder(View view) {
super(view);
letterText = view.findViewById(R.id.grid_text);
imageView = view.findViewById(R.id.grid_image);
}
void build(String title, Drawable dr) {
letterText.setText(title);
imageView.setImageDrawable(dr);
}
}
Это в основном все адаптеры, необходимые для загрузки изображений.