Android之GridView初步认识

来源:互联网 发布:Ubuntu安装时跨硬盘 编辑:程序博客网 时间:2024/06/01 08:19

GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。

GridView的常用属性:

   android:stretchMode="columnWidth" //缩放与列宽大小同步

    android:columnWidth="100dp"  //列的宽度

    android:numColumns="3"//设置列数

    android:horizontalSpacing="10dp"//水平间距

    android:verticalSpacing="10dp"//垂直间距

    android:gravity="center"//设置对齐方式

 

 

第一个实例:Adnroid官方定义的方法

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.GridView;

 

public class MainActivity extends Activity {

//定义整型数组,放图片

private Integer[] mImagesIds={

R.drawable.p1,R.drawable.p2,

R.drawable.p3,R.drawable.p4,

R.drawable.p5,R.drawable.p6,

R.drawable.p7,R.drawable.p8,

};

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//找到gridview控件

GridView gridview=(GridView)findViewById(R.id.gridview);

//给gridview设置一个适配器

gridview.setAdapter(new ImageAdapter(this));

//设置gridview的背景

gridview.setBackgroundResource(R.drawable.p1);

 

//设置当点击图片时,要执行的方法,实现onItemClick方法

gridview.setOnItemClickListener(new OnItemClickListener() {

 


public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

Intent intent=new Intent(MainActivity.this,ImageViewActivity.class);

intent.putExtra("id"mImagesIds[position]);

startActivity(intent);

}

});

}

}

//定义适配器

class ImageAdapter extends BaseAdapter{

////定义整型数组,放图片

private Integer[] mThumbIds={

R.drawable.p1,R.drawable.p2,

R.drawable.p3,R.drawable.p4,

R.drawable.p5,R.drawable.p6,

R.drawable.p7,R.drawable.p8,

};

 

private Context mcontext;

//重写构造方法,接受new ImageAdapter(this)传来的参数

public ImageAdapter(Context c){

mcontext=c;

}

//获取图片的个数

public int getCount() {

return mThumbIds.length;

}

 

//获取图片的位置

public Object getItem(int position) {

return null;

}

 

//获取图片Id

public long getItemId(int position) {

return position;

}

 

//获得图片位置和图片的相关属性

public View getView(int position, View convertView, ViewGroup parent) {

ImageView imageView;

if(convertView==null){

//创建有参数的imageview对象

imageView=new ImageView(mcontext);

//设置布局显示85*85

imageView.setLayoutParams(new GridView.LayoutParams(85,85));

//设置比列显示类型

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

//设置上下左右的间距

imageView.setPadding(10,10,10,10);

}

else{

imageView=(ImageView)convertView;

}

//设置图片资源位置

imageView.setImageResource(mThumbIds[position]);

return imageView;

}

}

ImageViewActivity代码:

public class ImageViewActivity extends Activity {

private ImageView imageView;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.image);

imageView=(ImageView)findViewById(R.id.imageView);

Intent intent=getIntent();

int imageId=intent.getIntExtra("id", R.drawable.p1);

imageView.setImageResource(imageId);

}

}

image.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>

 

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/imageView"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

</ImageView>


效果图:



效果图:点击任意一张图片会放大



总结:

1.设置布局文件

<?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:numColumns="auto_fit"  

android:verticalSpacing="10dp" 

android:horizontalSpacing="10dp"  

android:columnWidth="90dp" 

android:stretchMode="columnWidth"  

    android:gravity="center" />   

2.把图片copydrawable

3.定义图片的数组

4.找到GridView控件,设置适配器Adapeter

5.创建一个适配器继承BaseAdapter,并重写里面的方法


第二个实例:自定义实现

import java.util.ArrayList;

import java.util.List;

 

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.TextView;

import android.app.Activity;

import android.content.Context;

 

public class MainActivity extends Activity {

private GridView gridview;

private String[] titles={"金孝渊","权侑莉","金泰妍","林允儿","徐珠贤","郑秀妍","崔秀英","黄美英","李顺圭"};

private int[]    images={R.drawable.s1,R.drawable.s2,R.drawable.s3,R.drawable.s4,R.drawable.s5,R.drawable.s6,R.drawable.s7,R.drawable.s8,R.drawable.s9};

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gridview=(GridView)findViewById(R.id.gridview);

PictureAdapter adapter=new PictureAdapter(titles,images,this);

gridview.setAdapter(adapter);

}

class PictureAdapter extends BaseAdapter{

private LayoutInflater inflater;

private List<Picture>list;

public PictureAdapter(String[] titles,int[] images,Context context){

super();

list=new ArrayList<Picture>();

inflater=LayoutInflater.from(context);

for (int i = 0; i < images.length; i++) 

        { 

            Picture picture=new Picture(titles[i],images[i]);

            list.add(picture); 

        } 

}

 

@Override

public int getCount() {

return list.size();

}

 

@Override

public Object getItem(int position) {

return list.get(position);

}

 

@Override

public long getItemId(int position) {

return position;

}

 

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;

if(convertView==null){

convertView=inflater.inflate(R.layout.picture,null);

viewHolder=new ViewHolder();

viewHolder.title=(TextView)convertView.findViewById(R.id.title);

viewHolder.image=(ImageView)convertView.findViewById(R.id.image);

convertView.setTag(viewHolder);

}

else{

viewHolder=(ViewHolder)convertView.getTag();

}

viewHolder.title.setText(list.get(position).getTitle());

viewHolder.image.setImageResource(list.get(position).getImageId());

return convertView;

}

}

class ViewHolder{

public TextView title;

public ImageView image;

}

class Picture{

public String title;

public int imageId;

public  Picture(){

super();

}

public Picture(String title,int imageId){

super();

this.title=title;

this.imageId=imageId;

}

public String  getTitle(){

return title;

}

public void setTitle(String title){

this.title=title;

}

public int getImageId() 

    { 

        return imageId

    } 

 

    public void setImageId(int imageId) 

    { 

        this.imageId = imageId; 

    } 

}

 

}

效果图:



总结:一直在报outofmemory的错误,于是把图片截小点,就可以正常运行了。这是一个加载图片时溢出的问题,怎么通过代码解决溢出,我还不知道,请教大神。



第三个实例:通过系统自带的SimpleAdapter实现(用这个方法实现第二个实例的效果时,需要图片大小一样)

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import android.os.Bundle;

import android.widget.GridView;

import android.widget.SimpleAdapter;

import android.app.Activity;

 

public class MainActivity extends Activity {

private GridView gridview;

int[] drawableIds={R.drawable.s1,R.drawable.s2,R.drawable.s3,R.drawable.s4,R.drawable.s5,R.drawable.s6,R.drawable.s7,R.drawable.s8,R.drawable.s9};

int[] nameIds={R.string.s1,R.string.s2,R.string.s3,R.string.s4,R.string.s5,R.string.s6,R.string.s7,R.string.s8,R.string.s9};

int[] msgIds={R.string.s1is,R.string.s2is,R.string.s3is,R.string.s4is,R.string.s5is,R.string.s6is,R.string.s7is,R.string.s8is,R.string.s9is};

public List<?extends Map<String,?>> generateDataList(){

ArrayList<Map<String,Object>> list=newArrayList<Map<String,Object>>();

//获得图片的个数

int rowCounter=drawableIds.length;

//循环生成每一列对应的数据Mapco11,co12,co13为列名

for(int i=0;i<rowCounter;i++){

HashMap<String,Object> hmap=new HashMap<String,Object>();

//第一列co11对应的是图片数据

hmap.put("co11"drawableIds[i]);

//第二列co12对应的是姓名数据

 

hmap.put("co12"this.getResources().getString(nameIds[i]));

//第三列co13对应的是描述数据

 

hmap.put("co13"this.getResources().getString(msgIds[i]));

//将生成的数据加入到ArrayList<Map<String,Object>>

list.add(hmap);

}

return list;

}

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gridview=(GridView)findViewById(R.id.gridview);

/* 创建适配器,系统自带的SimpleAdapter

第一个参数为上下文,context

第二个参数为数据list

第三个参数为GridView的大框架的界面布局引用

第四个参数为列名列表

第五个参数为每一列所对应的控件id信息

*/

SimpleAdapter spa=new SimpleAdapter(this,generateDataList(),R.layout.row,new String[]{"co11","co12","co13"},new int[]{R.id.image,R.id.tv2,R.id.tv3});

gridview.setAdapter(spa);

}

 

}

 

String.xml文件中的代码:

<?xml version="1.0" encoding="utf-8"?>

<resources>

 

    <string name="app_name">GridViewthree</string>

    <string name="action_settings">Settings</string>

    <string name="s1">金孝渊</string>

    <string name="s2">权侑莉</string>

    <string name="s3">金泰妍</string>

    <string name="s4">林允儿</string>

<string name="s5">徐珠贤</string>

<string name="s6">郑秀妍</string>

<string name="s7">崔秀英</string>

<string name="s8">黄美英</string>

<string name="s9">李顺圭</string>

<string name="s1is">少女时代成员</string>

<string name="s2is">少女时代成员</string>

<string name="s3is">少女时代成员</string>

<string name="s4is">少女时代成员</string>

<string name="s5is">少女时代成员</string>

<string name="s6is">少女时代成员</string>

<string name="s7is">少女时代成员</string>

<string name="s8is">少女时代成员</string>

<string name="s9is">少女时代成员</string>

</resources>

 

 

 

row.xml文件中的代码:这个的作业是定义GridView的显示方式,定义的一个Item,为水平显示,左边一个ImageView右边两个TextView

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" >

    

    <ImageView 

        android:id="@+id/image"

        android:scaleType="fitXY"

        android:layout_width="80dp"

        android:layout_height="100dp"/>

    <TextView 

        android:layout_marginLeft="30dp"

        android:id="@+id/tv2"

        android:layout_gravity="center_horizontal|center_vertical"

        android:layout_width="100dp"

        android:layout_height="wrap_content"

        />

    <TextView 

     

        android:layout_gravity="center_horizontal|center_vertical"

        android:id="@+id/tv3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        />

 

</LinearLayout>

效果图:








0 0
原创粉丝点击