Recycler ビューと幅を 2 ずつカットする StaggeredGrid に問題があります。Picasso を使用して画像をアイテムにロードすると、最初に画像をロードすると、リサイクラー ビューで奇妙に配置されます。リロード後、すべてが良さそうです。
問題は画像の読み込みにあると思います.StaggeredGridは最初は画像の高さを知りませんが、キャッシュのためにリロード後に知っています.
どうすればこの問題を解決できますか?
Recycler ビューと幅を 2 ずつカットする StaggeredGrid に問題があります。Picasso を使用して画像をアイテムにロードすると、最初に画像をロードすると、リサイクラー ビューで奇妙に配置されます。リロード後、すべてが良さそうです。
問題は画像の読み込みにあると思います.StaggeredGridは最初は画像の高さを知りませんが、キャッシュのためにリロード後に知っています.
どうすればこの問題を解決できますか?
ギャップ戦略を に変更することで解決:
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(manager);
アイテムの位置を自動的に変更する
これは、上下にスクロールしたときに、ホルダーが画像ビューの幅と高さを認識しないために発生します。下にスクロールすると上のビューがクリアされ、その逆も同様です。
次のように使用します。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
MyViewHolder vh = (MyViewHolder) viewHolder;
ImageModel item = imageModels.get(position);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams)vh.imageView.getLayoutParams();
float ratio = item.getHeight() / item.getWidth();
rlp.height = (int) (rlp.width * ratio);
vh.imageView.setLayoutParams(rlp);
vh.positionTextView.setText("pos: " + position);
vh.imageView.setRatio(item.getRatio());
Picasso.with(mContext).load(item.getUrl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position)).into(vh.imageView);
}
明確にするには、このリンクを参照してください: Picasso/Glide-RecyclerView-StaggeredGridLayoutManager