それ自身が複数の水平RecyclerViews
を含む垂直RecyclerView
を含むレイアウトを実装しようとしています(複数のニュースセクションを持つニュースサイトを想像してください、各セクションには水平にスクロールできる複数のニュース記事があります) 。RecyclerViewのRecyclerView:画像読み込み
水平RecyclerView
は(とりわけ)ImageView
を含んでいます。私はURLからの画像をこのImageView
にロードする最適な戦略を探しています。
まず、私のコード。
@Override
public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.content_preview_list_item, null);
ItemRowHolder mh = new ItemRowHolder(v);
mh.recycler_view_list.setAdapter(new SectionListDataAdapter(mContext, listener, new ArrayList<ContentPreviewButtonItem>()));
mh.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
return mh;
}
@Override
public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) {
Log.d("RecyclerViewDataAdapter", "onBindViewHolder");
final String sectionName = dataList.get(i).getTitle();
ArrayList singleSectionItems = dataList.get(i).getItems();
itemRowHolder.itemTitle.setText(sectionName);
((SectionListDataAdapter)itemRowHolder.recycler_view_list.getAdapter()).setItemList(singleSectionItems);
itemRowHolder.recycler_view_list.getAdapter().notifyDataSetChanged();
itemRowHolder.recycler_view_list.setHasFixedSize(true);
}
や画像が含まれていますインナーRecyclerView用:外RecyclerView用アダプタ
@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
Log.d("SectionListDataAdapter", "onCreateViewHolder");
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.content_preview_item, null);
SingleItemRowHolder mh = new SingleItemRowHolder(v);
return mh;
}
@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {
Log.d("SectionListDataAdapter", "onBindViewHolder");
ContentPreviewButtonItem singleItem = itemsList.get(i);
Uri imageUri = Uri.parse(singleItem.getImageUrl());
holder.itemImage.setImageURI(imageUri); //itemImage is a SimpleDraweeView
}
このコードは、携帯電話で素晴らしい作品ものの場合に、複数の内部RecyclerViews
、タブレット上の顕著な遅れがありますし、画像は一度に読み込まれます。今はFacebookのFrescoライブラリを使って画像をSimpleDraweeView
に読み込みます。私もピカソを試しましたが、複数の画像を一度に読み込まなければならないときはOutOfMemoryException
になります。 内部のRecyclerViews
のアダプタ作成をonBindViewHolder
の代わりにonCreateViewHolder
に移動してパフォーマンスを改善しましたが、遅れはまだ目立ちます。
このシナリオでは、画像を読み込むのに最適な戦略またはライブラリは何ですか。 おかげ
グライドは、私がどのを使用して信じている。このために最適です画像がロードされている間に画像のサイズを変更することもできますが、同じサムネイルを表示することもできます – silverFoxA
Picassoを使用して同じことができます。私はGlideを使用することでパフォーマンスの向上が期待できるとは思えません。または、ピカソ、フレスコなどの代わりにグライドをお勧めする理由はありますか? – Androidicus
私は長い間グライドを使用しています。キャッシングがあり、大きな画像処理能力は本当に驚くべきです。 – silverFoxA