0
當我快速瀏覽我的RecyclerView時,我注意到圖像實際加載到ImageView(使用Glide)之前,出現空白的ImageView。如果圖像不能成功載入,我寧願只顯示一個空的ImageView容器。我不想讓空的ImageView顯示,除非它包含已加載的圖像。在圖像加載之前看到下面的空ImageView出現在視覺上並不令人愉快,即使它在默認淡入之前只有幾毫秒從開始滑行:爲什麼我的ImageView在圖像加載之前出現(使用Glide)?
XML(irrelvant代碼移除)
<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);
}
}
}
澄清:滑翔淡入動畫對我來說不是必需的。如果解決方案更容易,沒有淡入,我可以。
在加載真實圖像之前,滑翔始終顯示空白圖像。沒有辦法避免它。除非你使用另一個庫。 – TOP
我從來沒有見過這個黑色圖像:S –
您可能想要緩存請求,以便下一次不會執行另一個請求,而是使用前一個請求的響應,並在用戶第二次看到圖像時阻止空白屏幕。 – HaroldSer