繁体   English   中英

滑行预加载图像

[英]Glide pre loaded image

我正在使用滑行加载本地图像。 在第一个活动中,我加载了五张大尺寸图像,而在第二个活动中又加载了相同的图像,但是问题是我已经在第一个活动中下载了图像,并且可以在缓存中使用,但是加载时花了第二个活动的时间。 我的第一个活动代码

   Glide
                .with(getApplicationContext())
                .load(path)
                .asBitmap()
                .thumbnail(0.1f)
                 .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .priority(Priority.HIGH)
                .override(180, 180);

和第二项活动

    Glide
            .with(context)
            .load(path)
            .asBitmap()
            .thumbnail(0.1f)
            .diskCacheStrategy(DiskCacheStrategy.RESULT)
            .priority(Priority.HIGH)
            .override(180, 180).into(viewHolder.img_android);

请注意,所有图像的大小均大于5 mb。 当我第一次打开第二个活动时,图像需要花一些时间才能加载,然后再次打开时加载得如此之快。 所以我想在第一次活动时预加载所有图像。 这怎么可能。 我的第一个活动代码:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third);

    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(R.drawable.iamge_1);
    list.add(R.drawable.iamge_2);
    list.add(R.drawable.iamge_3);
    list.add(R.drawable.image_5);
    list.add(R.drawable.iamge_4);
    list.add(R.drawable.image_6);
    loadImages(list);

    findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(First.this, Second.class);
            startActivity(i);
        }
    });
}


public void loadImages(ArrayList<Integer> list) {

    for ( int i = 0; i < list.size(); i++) {
        Glide
                .with(getApplicationContext())
                .load(list.get(i))
                .asBitmap()
                .thumbnail(0.1f)
                 .diskCacheStrategy(DiskCacheStrategy.ALL)
                .priority(Priority.HIGH)
                .override(133, 133);

    }
}

第二活动代码:

 private void initViews() {
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 2);
    recyclerView.setLayoutManager(layoutManager);

    ArrayList<Integer> androidVersions = prepareData();
    DataAdapter adapter = new DataAdapter(getApplicationContext(), androidVersions);
    recyclerView.setAdapter(adapter);

}

public ArrayList<Integer> prepareData() {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(R.drawable.iamge_1);
    list.add(R.drawable.iamge_2);
    list.add(R.drawable.iamge_3);
    list.add(R.drawable.image_5);
    list.add(R.drawable.iamge_4);
    list.add(R.drawable.image_6);
    return list;
}

和适配器:

 @Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext())
      .inflate(R.layout.recycler_item, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

    Glide
            .with(context)
            .load(android.get(i))
            .asBitmap()
            .thumbnail(0.1f)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .override(133, 133).into(viewHolder.img_android);
}

@Override
public int getItemCount() {
    return android.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    private TextView tv_android;
    private ImageView img_android;

    public ViewHolder(View view) {
        super(view);

        img_android = (ImageView) view.findViewById(R.id.img_android);
    }
}

您可以使用

 .placeholder(R.drawable.your_image) // for default image.

根据您的要求,阅读使用缓存策略

  • DiskCacheStrategy.NONE不缓存任何内容, 如前所述

  • DiskCacheStrategy.SOURCE仅缓存原始的全分辨率图像。 在上面的示例中,该像素为1000x1000像素

  • DiskCacheStrategy.RESULT在降低分辨率(可能还有转换)之后仅缓存最终映像(默认行为)

  • DiskCacheStrategy.ALL缓存映像的所有版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM