9

誰のアイテムに が含まれていて、画像が を使用してロードされているかを示すのに問題RecyclerViewがあります。私が直面している問題は、画像が読み込まれた後、それらがずれておらず、同じサイズであり、2 つの列の間に大きなギャップがあることです。列に隙間なく画像の高さを変える方法は?StaggeredGridLayoutManagerimageviewimageviewglide

4

5 に答える 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 に答える