GridView用法和ListView用法基本一致,这里实现了一个选择照片的gridview功能。

先来看下效果吧!

实现也十分简单,一个android工程中包括2个.java文件和2个.xml文件
先看代码

MainActivity.java

package com.example.gridviewdemo;import java.util.ArrayList;import java.util.List;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.app.Activity;import android.content.Context;import android.os.Bundle;public class MainActivity extends Activity {    private GridView gridView;    private List photoList;    private PhotoAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    /*     * 初始化函数     */    private void initView(){        getPhotoData();//保存数据        gridView = (GridView)findViewById(R.id.gridview);        adapter = new PhotoAdapter(this, photoList);        gridView.setAdapter(adapter);        /*         * 点击某张图片响应         */        gridView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                photoList.get(position).setOppositeCheck();//点击后将状态取反                adapter.notifyDataSetChanged();//刷新界面            }        });    }    /*     * 将数据显示的数据,图片保存进list     */    private void getPhotoData(){        int drawables [] ={R.drawable.p0,R.drawable.p1,R.drawable.p2,R.drawable.p3,                R.drawable.p4,R.drawable.p5,R.drawable.p6,R.drawable.p7,R.drawable.p8,                R.drawable.p9,R.drawable.p10,R.drawable.p11,R.drawable.p12,R.drawable.p13,                R.drawable.p14,R.drawable.p15,R.drawable.p16,R.drawable.p17,R.drawable.p18,                R.drawable.p19,R.drawable.p20        };        photoList = new ArrayList();        for(int i =0;i<20;i++)        {            Photo photo = new Photo(drawables[i],false);            photoList.add(photo);        }    }    /*     * 这里将adapter写成内部类     */    class PhotoAdapter extends BaseAdapter {        private List objects = new ArrayList();        private Context context;        public PhotoAdapter(Context context,List list) {            this.context = context;            this.objects = list;        }        @Override        public int getCount() {            return objects.size();        }        @Override        public Photo getItem(int position) {            return objects.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder viewHolder = null;            if(convertView ==null){                convertView = LayoutInflater.from(context).inflate(R.layout.item, null);                viewHolder = new ViewHolder();                viewHolder.photos = (ImageView)convertView.findViewById(R.id.photo);                viewHolder.check = (ImageView)convertView.findViewById(R.id.check);                convertView.setTag(viewHolder);            }            else                viewHolder = (ViewHolder)convertView.getTag();            viewHolder.photos.setImageResource(getItem(position).getPhotoId());            if(getItem(position).isPhotoChecked())//如果图片为选中状态                viewHolder.check.setImageResource(R.drawable.choosed);//如果选中图标为绿色            else//如果图片是默认状态                viewHolder.check.setImageResource(R.drawable.nochoose);             return convertView;        }        protected class ViewHolder {            ImageView photos;            ImageView check;        }    }}

Photo.java

package com.example.gridviewdemo;/* * 定义一个photo类来保存数据 */public class Photo {    private int PhotoId;//照片资源ID    private boolean photoChecked;//判断照片的状态,true表示被选中 false表示未被选中    public Photo(int PhotoId,boolean photoChecked) {        this.PhotoId = PhotoId;        this.photoChecked = photoChecked;    }    public int getPhotoId() {        return PhotoId;    }    public boolean isPhotoChecked() {        return photoChecked;    }    /*     * 这是将状态取反的函数,用于点击图片时,右下角的勾选变化     */    public void setOppositeCheck(){        this.photoChecked = !this.photoChecked;    }}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="#000000" >   <RelativeLayout        android:id="@+id/select_photo_top"        android:layout_width="match_parent"        android:layout_height="48dp"        android:background="#ff4dad43"        android:paddingRight="10dp" >        <RelativeLayout            android:id="@+id/select_photo_back_button"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_marginLeft="5dp" >            <ImageView                android:layout_width="21dp"                android:layout_height="21dp"                android:layout_centerHorizontal="true"                android:layout_centerVertical="true"                android:src="@drawable/top_back_button" />        RelativeLayout>        <TextView            android:id="@+id/select_photo_top_middle_text"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:text="选择照片"            android:textColor="#ffffff"            android:textSize="21sp" />        <RelativeLayout            android:id="@+id/select_photo_commit"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_alignParentRight="true"            android:clickable="false" >            <TextView                android:id="@+id/select_photo_commit_text"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerVertical="true"                android:text="上传"                android:textColor="#ffffff"                android:textSize="18sp" />        RelativeLayout>    RelativeLayout>    <GridView        android:id="@+id/gridview"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/select_photo_top"        android:layout_marginLeft="0.5dp"        android:layout_marginRight="0.5dp"        android:layout_marginTop="1.5dp"        android:horizontalSpacing="1.5dp"        android:verticalSpacing="1.5dp"        android:listSelector="#00000000"        android:numColumns="3"        android:scrollbars="none"         >    GridView>RelativeLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#000000"     >    <ImageView        android:id="@+id/photo"        android:layout_width="wrap_content"        android:layout_height="120dp" />    <ImageView        android:id="@+id/check"        android:layout_width="20dp"        android:layout_height="20dp"        android:layout_gravity="right|bottom"        android:layout_marginBottom="4dp"        android:layout_marginRight="4dp"        android:src="@drawable/nochoose" />FrameLayout>

还有xml和java文件中的一些图片资源需要大家自己去搞,也可以直接下载我的Demo。GridView其实和ListView在使用上基本一致,都是通过Adapter去显示内容。代码比较简单,大部分注释都有,在这里就不作太多解释。
GridView的一些主要属性可以参考这篇博文
http://blog.csdn.net/ztp800201/article/details/14469883

有什么问题可以留言交流。。。

更多相关文章

  1. Android(安卓)保存图片到相册无法显示的问题
  2. Android多进程加载资源失败问题分析:android.content.res.Resour
  3. Android通过selector改变界面状态
  4. Android使用系统方法实现分享到QQ和微信!
  5. 开始使用Android(安卓)Sutdio(三)创建一个Hello World程序
  6. Android实现组合键监听功能
  7. android中获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
  8. Android消息通知
  9. android TabHost(选项卡)的使用方法

随机推荐

  1. Android双向seekbar
  2. 如何使用 Android(安卓)Studio 的 git hu
  3. Android(安卓)获取设备电池电量
  4. Android拨打电话 安卓拨打电话权限
  5. How to create a custom notification on
  6. android 输入对话框
  7. Android判断网络状态
  8. Android(安卓)创建DBHelper类
  9. android远程绑定与本地绑定区别
  10. LK based Android(安卓)bootloader