誰のアイテムに が含まれていて、画像が を使用してロードされているかを示すのに問題RecyclerView
があります。私が直面している問題は、画像が読み込まれた後、それらがずれておらず、同じサイズであり、2 つの列の間に大きなギャップがあることです。列に隙間なく画像の高さを変える方法は?StaggeredGridLayoutManager
imageview
imageview
glide
質問する
8531 次
5 に答える
6
ついにソウルティオンを発見することができました。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));
于 2016-03-23T08:22:05.257 に答える
0
最初に 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);
次に、アダプター(必要に応じて編集)
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.with(this).load(imageUrl).into(imageView);
于 2016-03-22T08:30:18.883 に答える