如何使用GridView实现不同数量显示图片不同的大小

来源:互联网 发布:魔女的条件知乎 编辑:程序博客网 时间:2024/05/17 06:55

有时我们需要在空间看到说说发布一张图片变得很大,多发几张图片就变小了,为了实现这个效果我们就需要Gridview 和它的Adapter
下面是GridView的代码

activity_grid_test.xml

<LineaLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.rindiaco.myweibo.GridTestActivity">    <GridView        android:id="@+id/testimggridview"        android:layout_width="match_parent"        android:layout_height="wrap_content"       >    </GridView></LineaLayout >

这里的numColumns我们在gridview 的绑定环境再设置
Activity代码

GridTestActivity.java

public class GridTestActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_grid_test);        LinkedList<Integer> pictures = new LinkedList<>();        pictures.add(R.drawable.imgid4);//        pictures.add(R.drawable.imgid1);//        pictures.add(R.drawable.imgid2);//        pictures.add(R.drawable.imgid3);//        pictures.add(R.drawable.imgid5);//        pictures.add(R.drawable.imgid6);        GridView testimggridveiw = (GridView) findViewById(R.id.testimggridview);        //在这里判断图片的数量,根据图片的数量改变GridView的列数,图片的大小要在Adapter里设置才有效        if (pictures.size()>=3) testimggridveiw.setNumColumns(3);        if (pictures.size()==1) testimggridveiw.setNumColumns(1);        //绑定自定义的adapter        MyImageAdapter imgadapter = new MyImageAdapter(this,pictures);        testimggridveiw.setAdapter(imgadapter);    }}

现在是Adapter的内容

MyImageAdapter.java

public class MyImageAdapter extends BaseAdapter{    Context context;    LinkedList<Integer> imgList;    MyImageAdapter(Context context , LinkedList<Integer> imgList){        this.context = context;        this.imgList = imgList;    }    @Override    public int getCount() {        return imgList.size();    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHodler viewHodler;        if (convertView == null){            viewHodler   = new ViewHodler();            convertView = View.inflate(context,R.layout.image,null);             viewHodler.imageView = (ImageView) convertView.findViewById(R.id.imgview);             //根据图片的数量设置图片的大小,这里的大小是写的具体数值,也可以获得手机屏幕的尺寸来设置图片的大小            if (imgList.size()==1){                ViewGroup.LayoutParams params = viewHodler.imageView.getLayoutParams();                params.height = 800;                params.width = 800;                viewHodler.imageView.setLayoutParams(params);            }else if (imgList.size()==2){                ViewGroup.LayoutParams params = viewHodler.imageView.getLayoutParams();                params.height = 600;                params.width = 600;                viewHodler.imageView.setLayoutParams(params);            }else{                ViewGroup.LayoutParams params = viewHodler.imageView.getLayoutParams();                params.height = 400;                params.width = 400;                viewHodler.imageView.setLayoutParams(params);            }            convertView.setTag(viewHodler);        }else{            viewHodler =(ViewHodler) convertView.getTag();        }        viewHodler.imageView.setImageResource(imgList.get(position));        return  convertView;    } class  ViewHodler{        ImageView imageView;    }}

LayoutParams 是view 的一个内部类,相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息,它可以设置以下三个值:
1,一个确定的值;
2,FILL_PARENT,即填满(和父容器一样大小);
3,WRAP_CONTENT,即包裹住组件就好。

image.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    android:padding="5dp"    android:gravity="center"    xmlns:android="http://schemas.android.com/apk/res/android" ><ImageView    android:id="@+id/imgview"    android:layout_width="100dp"    android:layout_height="100dp"    ></ImageView></LinearLayout>

实现效果
一张图片
一张图片时的显示效果
两张图片
这里写图片描述
9张图片
这里写图片描述
这个功能最核心的想法就是改变GridView的列数和图片的大小

阅读全文
0 0
原创粉丝点击