Android GridView的使用

GridView 控件是一个 ViewGroup,显示一个二维的网格项目。网格的项目会自动插入到使用 listadapter布局。

为介绍如何使用适配器可以动态地插入视图,用适配器读取建筑布局。 

例子
在本教程中,您将创建一个图像缩略图网格。当选择项目时,会显示图片的位置。
1开始一个新项目命名为hellogridview
2找一些你想使用的照片,或者下载这些图片。保存图像文件到工程的res/drawable/目录。
3打开res/layout/ main.xml文件并插入以下:

<?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"
/>

这个控件将填满整个屏幕。属性已经说的很明确了。关于有效的属性的更多信息,参见GridView的参考。
打开 hellogridview.javaoncreate()方法插入下面代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
}

在main.xml布局设置的内容来看,GridView从布局捕获findViewById(int)的setadapter()方法建立自定义适配器(图片适配器),作为所有项目将显示在网格中的源。

下一步需要创建的图片适配器。
实际上,网格中的一个项目时,该方法是通过一个新的adapterview.onitemclicklistener setonitemclicklistener()

这个匿名的实例定义了显示索引位置的onitemclick()回调方法(零基础)的选定项(在真实的场景中,位置可以获得全尺寸的图像的其他任务)。
创建一个新的类称为延伸baseadapter图片适配器:

public class ImageAdapterextends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

首先,这实现了一些必需的方法继承了baseadapter。构造函数和getcount()是不言自明的。

通常,getitem(int)应该返回在适配器中指定位置的实际对象,但它的这个例子忽略。

同样,getitemid(int)应该返回该项的行ID,但在这里不需要用到。
第一种方法是必要的getview()。此方法创建一个新的角度为每个图像添加到图片适配器。

当这个被调用时,一个视图被传递,通常是一个回收的对象(至少在这个被调用一次),所以有一个检查,看看是否该对象是空的。

如果它是空的,一个ImageView实例化和配置所需的性能,图像演示:
setlayoutparams(ViewGroup。LayoutParams)设置的角度保证了高度和宽度,无论几何体的大小,每个图像缩放和裁剪以适应这些尺寸,适当。
setscaletype(ImageView。秤类型)宣称,图像应出现向中心(如果需要)。
setpadding(int,int,int,int)定义了各方的填充。(注意,如果图像具有不同的长宽比,然后少填充会导致更多的裁剪的图像如果不匹配给定尺寸的图片。)
如果视图通过getview()不为空,那么当地ImageView是回收的视图对象初始化。
在getview()方法结束位置的整数,通过使用的方法是选择从mthumbids阵列的图像,这是设置为ImageView的图像资源。
剩下的就是定义drawable资源mthumbids阵列。
运行应用程序。
尝试用GridView和调整性能ImageView元素的行为。例如,而不是使用setlayoutparams(ViewGroup。LayoutParams),试着用setadjustviewbounds(布尔)。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值