当前位置: 首页 > 知识库问答 >
问题:

如何在Gridlayout中放大第一幅图像?

孟祯
2023-03-14

我正在使用GridLayoutManager的回收器视图。我还使用以下代码使第一个项目变大

        lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int i) {
            if (i==0) return 2;
            else return 1;
        }
    });

除了一个以外,其他一切都正常:位置1处的物品(即大图中的下一个物品)被垂直拉长,以匹配大件物品的高度。从第3行开始,所有图像如图所示。

我怎么才能摆脱这个?

编辑:经过一些分析

所以问题似乎是,大图像是水平的两个跨度,但垂直的单个跨度,因为我已经强制我的ImageView是方形的,它看起来像是也取了两行,而实际上它是单行。由于这个原因,第二张图像似乎拉长了。

所以现在我的问题是,如何使网格项垂直和水平分别取两个跨度?

共有2个答案

董霖
2023-03-14

在GridViewAdapter类中尝试以下代码

public class GridViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<Integer> imageArrayList = new ArrayList<>();
private int type;

public GridViewAdapter(Context context, ArrayList<Integer> imageArrayList) {
    this.context = context;
    this.imageArrayList = imageArrayList;
}

@Override
public int getCount() {
    return imageArrayList.size();
}

@Override
public Object getItem(int position) {
    return imageArrayList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = new ViewHolder();
    if(convertView==null){
        LayoutInflater inflater = LayoutInflater.from(context);
        type = getItemViewType(position);
        if(type==0) {
            convertView = inflater.inflate(R.layout.big_layout,parent,false);
        }else {
            convertView = inflater.inflate(R.layout.small_layout, parent, false);
        }
        viewHolder.imageView = convertView.findViewById(R.id.imageView);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }
        viewHolder.imageView.setImageDrawable(context.getResources().getDrawable(imageArrayList.get(position)));
    return convertView;
}

@Override
public int getViewTypeCount() {
    return super.getViewTypeCount();
}

@Override
public int getItemViewType(int position) {
    if(position==0) {
        return 0;
    }else{
        return 1;
    }
}

    private class ViewHolder{
        ImageView imageView;
    }
}
顾斌
2023-03-14

尝试使用StaggeredGridLayoutManager而不是GridLayoutManager StaggeredGridLayoutManager支持水平

final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();    
if (position == 0) {
                StaggeredGridLayoutManager.LayoutParams sglp = (StaggeredGridLayoutManager.LayoutParams) lp;
                sglp.setFullSpan(true);
                holder.itemView.setLayoutParams(sglp);
            }

找到例子http://enoent.fr/blog/2015/01/18/recyclerview-basics/...希望对你有帮助

 类似资料:
  • 我正在学习JavaFX。我想在几秒钟后一个接一个地显示一些图标。我的代码不起作用。我写了一些代码。和图标存储在一个单独的文件夹称为图像。 我在网上找不到合适的答案。我想知道它是如何完成的逻辑,我还需要知道什么。因为单个图像I可以容易地显示。但是我不知道如何一个接一个地显示多个图像。

  • 我想知道他们的AndEngine的任何子库可以变形两个不同的图像吗?或者在Android系统中?我一直在找它,但我没有找到任何东西。帮帮我...

  • 本文向大家介绍如何做图片预览,如何放大一个图片?相关面试题,主要包含被问及如何做图片预览,如何放大一个图片?时的应答技巧和注意事项,需要的朋友参考一下 https://blog.csdn.net/Bule_daze/article/details/79543690

  • 用 subplot 命令可以在同一窗口中作多幅图或把它们打印到同一纸上。输入 subplot(m,n,p) 把figure窗口分成m*n个子区域及选择第p个区域为当前图。所作图是从figure窗口的顶行开始标号,然后第2行,依次类推。例如,以下语句在figure窗口的4个不同子区域分别作图。 t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subp

  • 问题内容: 目前,这是我的kv代码,无法滚动: 您如何使上面的kv代码可滚动?我知道Kivy ScrollView仅接受一个孩子,并且我已经使GridLayout成为新ScrollView的孩子。但这不起作用。有什么建议吗? 问题答案: 根据ScrollView的文档,您必须至少禁用ScrollView的子size_hint之一: 并绑定布局的大小以适应自身:

  • 我使用以下代码生成gagawa图表: 我得到这个图表: 如何放大文本(x轴、y轴、图例和标题)?