У меня возникают проблемы, показывающий RecyclerView
с StaggeredGridLayoutManager
которой элемент содержит imageview
и изображение загружается в imageview
с помощью glide
. Проблема, с которой я столкнулся, заключается в том, что после загрузки изображений они не расположены в шахматном порядке и имеют одинаковые размеры, а также большой разрыв между двумя столбцами. Как изменить высоту изображений без пробелов в столбцах?RecyclerView с StaggeredGridLayoutManager с изображениями загрузка из Glide
ответ
Наконец я смог выяснить soultion. Мне пришлось создать пользовательское изображение, чтобы изменить его соотношение сторон в Staggered Recycler View.
public class DynamicHeightNetworkImageView extends ImageView {
private float mAspectRatio = 1.5f;
public DynamicHeightNetworkImageView(Context context) {
super(context);
}
public DynamicHeightNetworkImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DynamicHeightNetworkImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setAspectRatio(float aspectRatio) {
mAspectRatio = aspectRatio;
requestLayout();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int measuredWidth = getMeasuredWidth();
setMeasuredDimension(measuredWidth, (int) (measuredWidth/mAspectRatio));
}
}
Затем в onBindViewHolder адаптера я установить соотношение сторон изображения с помощью -
Picasso.with(this).load(THUMB_URL).into(holder.thumbnailView);
holder.thumbnailView.setAspectRatio(ASPECT_RATIO));
Первый Ваш RecyclerView инициализировать
RecyclerView recyclerGallery = (RecyclerView)findViewById(R.id.gallery_recycler_view);
gaggeredGridLayoutManager = new StaggeredGridLayoutManager(3, 1);
recyclerGallery.setLayoutManager(gaggeredGridLayoutManager);
galleryAdapter = new GalleryAdaptor(ProfImageGallery.this, imgsUrl);
recyclerGallery.setAdapter(galleryAdapter);
Тогда Ваш адаптер (Edit соответствии с вашими потребностями)
public class GalleryAdaptor extends RecyclerView.Adapter<GalleryAdaptor.ViewHolder> {
private Context mContext;
private ArrayList<String> mDataset;
// Provide a suitable constructor (depends on the kind of dataset)
public GalleryAdaptor(Context mContext, ArrayList<String> mdataList) {
this.mContext = mContext;
this.mDataset = mdataList;
}
// Create new views (invoked by the layout manager)
@Override
public GalleryAdaptor.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_gallery, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
String imageUrl = mDataset.get(position);
holder.progressBar.setVisibility(View.VISIBLE);
//load the image url with a callback to a callback method/class
Picasso.with(mContext)
.load(imageUrl)
.into(holder.workImage,
new ImageLoadedCallback(holder.progressBar) {
@Override
public void onSuccess() {
if (holder.progressBar != null) {
holder.progressBar.setVisibility(View.GONE);
}
}
});
}
Заменить Picaso код т.е.
Picasso.with(mContext)
.load(imageUrl)
.into(holder.workImage,
new ImageLoadedCallback(holder.progressBar) {
@Override
public void onSuccess() {
if (holder.progressBar != null) {
holder.progressBar.setVisibility(View.GONE);
}
}
});
С Glide.
Glide.with(this).load(imageUrl).into(imageView);
Что такое макет для R.layout.row_gallery? – Passiondroid
это строка для вашего макета, используемого в ресайклере –
у меня был тот же вопрос. Для меня работала установка android:adjustViewBounds="true"
для моего ImageView. Я даже не устанавливаю scaleType.
Вот полное содержание моего файла макета item.xml.
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gif_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorFiller"
android:adjustViewBounds="true"/>
Надеюсь, это поможет!
- 1. Загрузка recyclerview с изображениями и видео
- 2. RecyclerView StaggeredGridLayoutManager проблема переупорядочения
- 3. Glide-Pause Загрузка изображения onscroll recyclerview
- 4. Предупреждение с использованием Glide in Recyclerview
- 5. RecyclerView, StaggeredGridLayoutManager Обновить ошибку
- 6. Как добавить headerview в recyclerview с staggeredGridLayoutManager
- 7. Использование RecyclerView с StaggeredGridLayoutManager не показывает ничего
- 8. Загрузка изображения синхронно с Glide
- 9. Загрузить изображение для RecyclerView с Glide
- 10. Glide и RecyclerView мигает
- 11. Recyclerview дублирование изображений с помощью Glide
- 12. Как обмениваться изображениями с RecyclerView?
- 13. Загрузка изображения с помощью Glide в Android
- 14. Загрузка с изображениями сначала?
- 15. Android RecyclerView с StaggeredGridLayoutManager фиксированной высотой строки в вертикальном режиме
- 16. Использование Fresco с StaggeredGridLayoutManager
- 17. RecyclerView и Glide испортили макет
- 18. Как оплатить элементы в RecyclerView с помощью StaggeredGridLayoutManager
- 19. Android RecyclerView StaggeredGridLayoutManager в вертикальном порядке
- 20. Загрузка изображения с помощью Glide (Android)
- 21. Загрузка изображений с использованием Glide в Imageview
- 22. проблемы с изображениями в recyclerview использованием Picasso
- 23. Загрузка изображений с помощью Glide из динамического URL-адреса
- 24. Android listview с Glide - удвоенными растровыми изображениями после загрузки
- 25. Как обмениваться изображениями с Firebase в RecyclerView?
- 26. Как использовать библиотеку манипуляции с изображениями Glide with plain PHP
- 27. Загрузка папки с изображениями с использованием Javascript
- 28. StaggeredGridLayoutManager возвращает неверный verticalScrollOffset
- 29. ImageView обновить с Glide
- 30. Загрузите библиотеку изображений Android Glide с размытыми изображениями
Если между столбцами существует большой разрыв, вы также должны предоставить «scaleType» своим изображениям, я бы предложил установить либо centerCrop, либо fitXY scaleType. – Apurva
, дающее любое изображение + код вашей работы, будет более поддающимся – Sayem
Вы можете посмотреть на это, где вы можете использовать глиссирование с помощью [Glide/Picasso-RecyclerView-StaggeredGridLayoutManager] (https://github.com/yuvaraj119/Picasso- RecyclerView-StaggeredGridLayoutManager) – YLS