2016-06-28 3 views
1

Я пытаюсь реализовать макет, содержащий вертикальный RecyclerView, который сам содержит несколько горизонтальных RecyclerViews (представьте новостной сайт с несколькими разделами новостей, где каждый раздел содержит несколько новостей, которые можно прокручивать по горизонтали) ,RecyclerView of RecyclerViews: Загрузка изображения

Горизонтальный RecyclerView содержит (между прочим) ImageView. Я ищу оптимальную стратегию загрузки изображения из URL-адреса в этот ImageView.

Во-первых, мой код. Адаптер для внешнего RecyclerView:

@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, который содержит изображение:

@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 и изображения загружаются сразу. Прямо сейчас я использую библиотеку Fresco Facebook для загрузки изображения в SimpleDraweeView. Я также попробовал Picasso, но это дало OutOfMemoryException, когда сразу нужно было загрузить несколько изображений. Я улучшил производительность, перемещая создание адаптера внутреннего RecyclerViews в onCreateViewHolder вместо onBindViewHolder, но отставание по-прежнему заметно.

Что является лучшей стратегией или библиотекой для загрузки изображений в этом сценарии. Благодаря

+0

Glide является идеально подходит для этого я считаю, с помощью которого вы можете изменить размер изображения, пока изображение загружается, вы можете отображать миниатюру того же – silverFoxA

+0

. Вы можете использовать то же самое, используя Picasso. Я не уверен, что я могу ожидать улучшения производительности от использования Glide. Или есть причина, по которой вы порекомендуете Glide вместо Picasso, Fresco и т. Д.? – Androidicus

+0

Я использую скольжение в течение долгого времени, и это кеширование и большая способность обработки изображений действительно удивительна. – silverFoxA

ответ

0

Glide является идеальным решением для этого я считаю, с помощью которого вы можете изменить размер изображения, также во время загрузки изображения можно отобразить эскиз одного и того же

 Смежные вопросы

  • Нет связанных вопросов^_^