【问题标题】:Why is my ImageView appearing before image is loaded into it (using Glide)?为什么我的 ImageView 在图像加载到它之前出现(使用 Glide)?
【发布时间】:2017-03-14 17:31:26
【问题描述】:

当我快速滚动浏览我的 RecyclerView 时,我注意到在图像实际加载到 ImageView(使用 Glide)之前出现了空白的 ImageView。如果图像没有成功加载,我宁愿它只是不显示任何东西,而不是空的 ImageView 容器。我不希望空的 ImageView 显示,除非它有加载的图像。在加载图像之前看到以下空的 ImageView 在视觉上并不令人愉快,即使它只是在默认淡入之前的几毫秒从 Glide 开始:

XML(已删除无关代码)

    <LinearLayout
        android:id="@+id/image_holder_layout"
        android:layout_width="85dp"
        android:layout_height="85dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:gravity="center"
        android:visibility="invisible">

        <ImageView
            android:id="@+id/flyer_item_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:background="@android:drawable/dialog_holo_light_frame" />
    </LinearLayout>

RecyclerAdapter.java

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ItemHolder> {

    private ArrayList<Item> items;
    Context context;


    public RecyclerAdapter(Context context, ArrayList<Item> items) {
        this.items = items;
        this.context = context;
    }


    @Override
    public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        Context context = viewGroup.getContext();
        boolean shouldAttachToParentImmediately = false;

        View view = LayoutInflater.from(context).inflate(R.layout.list_row_flyer, viewGroup, shouldAttachToParentImmediately);
        ItemHolder viewHolder = new ItemHolder(view);

        return viewHolder;
    }


    @Override
    public void onBindViewHolder(ItemHolder holder, int position) {
        holder.bind(position);
    }


    class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        LinearLayout itemImageLinearLayout;
        ImageView itemImage;


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

            itemImageLinearLayout = (LinearLayout) view.findViewById(R.id.image_holder_layout);
            this.itemImage = (ImageView) view.findViewById(R.id.flyer_item_image);
        }


        void bind(int listIndex) {
            Glide.with(context)
                    .load(items.get(listIndex).getImageUrl())
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .into(itemImage);
            itemImageLinearLayout.setVisibility(View.VISIBLE);
        }
    }
}

澄清一下:Glide 淡入动画对我来说不是必需的。如果解决方案在没有淡入的情况下更容易,我可以接受。

【问题讨论】:

  • Glide 在加载真实图像之前总是显示空白图像。没有办法避免它。除非您使用其他库。
  • 我从没见过这个黑色图像:S

标签: android imageview android-recyclerview android-glide


【解决方案1】:

尝试以下任一选项

  1. 从 imageView 中移除:android:background="@android:drawable/dialog_holo_light_frame"

  2. 尝试为 imageView 添加一个占位符。这将在加载实际图像之前添加默认图像

Glide.with(this) .load(网址) .placeholder(R.drawable.placeholder) .into(imageView);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多