如果已经在缓存中,可以强制滑动同步加载图像吗?

时间:2018-03-20 19:49:16

标签: android android-glide

背景信息

我正在处理的当前Android应用程序中有一些图像位于某些RecyclerView.ViewHolder

问题是相同的RecyclerView.ViewHolder还包含其他格式化数据 - 即使图像本身保持不变,也必须调用这些更改notifyDataSetChanged

处理RecyclerView内部图像加载的当前代码如下(注意它是伪代码)。

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder>
{
    // more code here

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position)
    {
        // more code here

        loadMyImage(holder.picture, myLink);
    }

    public void loadMyImage(AppCompatImageView picture, Uri myLink)
    {
        picture.setImageResource(R.drawable.placeholder);

        Glide.with(context).load(myLink).into(picture); // asynchronous load
    }
}

我的问题

问题是这会导致R.drawable.placeholdermyLink之间出现轻微但非常明显的闪烁。

我的尝试

现在我已经提出了两件事来解决这个问题。

1)尝试通过重做布局并重做基础代码将视图放入不同的视图持有者。
[这不是一个选择,因为构成该项目基础的意大利面和遗留代码的数量庞大]

2)尝试将行Glide.with(context).load(myLink).into(picture); // asynchronous load更改为强制同步加载的行public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder> { // more code here @Override public void onBindViewHolder(MyViewHolder holder, int position) { // more code here loadMyImage(holder.picture, myLink); } public void loadMyImage(AppCompatImageView picture, Uri myLink) { picture.setImageResource(R.drawable.placeholder); if (inCache(myLink)) { Glide.with(context).load(myLink).into(picture).synchronously(); } else { Glide.with(context).load(myLink).into(picture).asynchronously(); } } } [从理论上去除闪烁并仅添加标称延迟 - 因为它已经在缓存中了] [/ p>

{{1}}

0 个答案:

没有答案