0

m 使用RecyclerViewwith StaggeredGrid(spanCount 是可变的)。每个 GridItem (a CardView) 都包含一个方形 ImageView。我想要的是从我的后端加载一个具有所需宽度和高度的图像,以完全适合 CardView 内的 ImageView。有什么建议我可以做到吗?代码示例如下:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    Picasso.with(context)
        .load(String.format("http://mybackend.com/image/w_%d,h_%d/%s",
                holder.image.getMeasuredWidth(), // This returns 0, but i want here a real width
                holder.image.getMeasuredWidth(),
                myCollection.get(position).getImagePid()))
        .tag(context)
        .placeholder(R.drawable.placeholder_logo)
        .into(holder.image);

简而言之:在绑定 ViewHolder 之前,我需要以某种方式获取 imageView 尺寸(宽度)。

4

2 回答 2

1

您是否考虑过使用 .fit() ?我相信这会调整图像的大小以完全适合 ImageView。

于 2015-02-03T15:59:10.793 回答
0

您可以使用ViewTreeObserver

final int width = holder.image.getMeasuredWidth();
    if (width > 0) {
        Picasso.with(context)
                .load(String.format("http://mybackend.com/image/w_%d,h_%d/%s",
                        holder.image.getMeasuredWidth(), // This returns 0, but i want here a real width
                        holder.image.getMeasuredWidth(),
                        myCollection.get(position).getImagePid()))
                .tag(context)
                .placeholder(R.drawable.placeholder_logo)
                .into(holder.image);
    } else {
        holder.image.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                holder.image.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                Picasso.with(context)
                        .load(String.format("http://mybackend.com/image/w_%d,h_%d/%s",
                                holder.image.getMeasuredWidth(), // This returns 0, but i want here a real width
                                holder.image.getMeasuredWidth(),
                                myCollection.get(position).getImagePid()))
                        .tag(context)
                        .placeholder(R.drawable.placeholder_logo)
                        .into(holder.image);
            }
        });
    }
于 2015-04-02T17:35:00.887 回答