近期做了一个图片显示效果的工具,里面牵扯到了GridView的应用。其实GridView和listView应用基本类似。只不过ListView是用于从上往下以每一个Item显示的而GridView则是水平排列自动换行的。两者的布局一类 以及每-个Item等均可以用BaseAdaper进行设置 而且个人感觉BaseAdaper的却很好用!建议大家要学会这种设计模式,好了以下是相关代码:
首先是整体的布局文件:<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
然后是主函数代码:
package com.zzy.gridviw;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class GridViewActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridView=(GridView)findViewById(R.id.gridview);
gridView.setAdapter(new MyAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
//View 定义的arg1就是每个Item的信息
// TODO Auto-generated method stub
Toast.makeText(GridViewActivity.this, ""+arg2,Toast.LENGTH_LONG).show();
}
});
}
public final class ViewHolder{
//这个类的作用是用于对每个Item里的组件接受
private ImageView imageView;
}
public class MyAdapter extends BaseAdapter{
//这是我事先准备好的图片 放在一个数组中
private Integer[] argv={R.drawable.p1,R.drawable.p2,R.drawable.p3,R.drawable.p4,
R.drawable.p5,R.drawable.p6};
private LayoutInflater inflater;
public MyAdapter(GridViewActivity gridViewActivity)
{
// TODO Auto-generated constructor stub
this.inflater = LayoutInflater.from(gridViewActivity);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
//返回Item的个数
return argv.length;
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)//convertView 起到一个桥梁的作用
{
// TODO Auto-generated method stub
ViewHolder view=new ViewHolder();
if(convertView==null)
{
//获取layout中每一个类似于Item的布局文件
convertView=inflater.inflate(R.layout.picture_item, null);
}
view.imageView=(ImageView)convertView.findViewById(R.id.image); //获取图片资源用以显示
view.imageView.setImageResource(argv[position]);
return convertView;
}
}
}
整体来讲主函数主要的部分在于BaseAdaper的应用 只要这个会使用,其余的很好写
接下来是Item的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
>
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:scaleType="fitXY"
android:padding="4dp"
/>
</LinearLayout>