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.把图片copy进drawable中
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;
//循环生成每一列对应的数据Map,co11,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>
效果图:
- Android之GridView初步认识
- Android之Intent的初步认识
- scala之初步认识
- 计算机网络之初步认识
- CoordinatorLayout之初步认识
- Android初步认识02
- android 的初步认识
- 初步认识android databinding
- Android初步认识ToolBar
- Android Glide 初步认识
- android studio 初步认识
- android Templates初步认识
- Android RxJava初步认识
- ArcGIS for Android 之IdentifyTask初步认识和使用
- 我的学习之旅:android:ListView的初步认识
- android多线程之AsyncTask的初步认识(一)
- Android音频架构解析之(一)初步认识
- Android之Context的初步认识及使用
- 令人作呕的OpenSSL
- linux中遇到的错误
- UVA-10755 Garbage Heap 三维子矩阵最大和
- NEFU 快速幂取模
- Python入门教程-07 列表list
- Android之GridView初步认识
- 游戏资源提取软件介绍
- 点积与叉积
- Java参数传递
- [HDU3622][2-sat]Bomb Game
- CentOS下安装vsftpd
- Buffer类的详解
- C/C++中static机制的一点研究
- OSGi版本的HelloWorld实践