Gallery和GridView 小结
来源:互联网 发布:安易数据恢复软件免费 编辑:程序博客网 时间:2024/05/21 12:08
一.Gallery的简介
Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息。Gallery还可以和ImageSwitcher组件结合使用来实现一个通过缩略图来浏览图片的效果。
Gallery常用的XML属性
属性名称
描述
android:animationDuration
设置布局变化时动画的转换所需的时间(毫秒级)。仅在动画开始时计时。该值必须是整数,比如:100。
android:gravity
指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个(使用 “|”分割)
Constant
Value
Description
top
0x30
紧靠容器顶端,不改变其大小
bottom
0x50
紧靠容器底部,不改变其大小
left
0x03
紧靠容器左侧,不改变其大小
right
0x05
紧靠容器右侧,不改变其大小
center_vertical
0x10
垂直居中,不改变其大小
fill_vertical
0x70
垂直方向上拉伸至充满容器
center_horizontal
0x01
水平居中,不改变其大小
Fill_horizontal
0x07
水平方向上拉伸使其充满容器
center
0x11
居中对齐,不改变其大小
fill
0x77
在水平和垂直方向上拉伸,使其充满容器
clip_vertical
0x80
垂直剪切(当对象边缘超出容器的时候,将上下边缘超出的部分剪切掉)
clip_horizontal
0x08
水平剪切(当对象边缘超出容器的时候,将左右边缘超出的部分剪切掉)
android:spacing
图片之间的间距
android:unselectedAlpha
设置未选中的条目的透明度(Alpha)。该值必须是float类型,比如:“1.2”。
首先介绍Gallery单独使用的例子:
MainActivity.java
1. package com.android.gallerydemo;
2.
3. import android.app.Activity;
4. import android.content.Context;
5. import android.os.Bundle;
6. import android.view.View;
7. import android.view.ViewGroup;
8. import android.widget.AdapterView;
9. import android.widget.AdapterView.OnItemClickListener;
10. import android.widget.BaseAdapter;
11. import android.widget.Gallery;
12. import android.widget.ImageView;
13. import android.widget.Toast;
14.
15. public class MainActivity extends Activity {
16.
17. private Gallery gallery;
18. @Override
19. public void onCreate(Bundle savedInstanceState) {
20.
21. super.onCreate(savedInstanceState);
22. setContentView(R.layout.main);
23. gallery = (Gallery)findViewById(R.id.gallery);
24. //设置图片适配器
25. gallery.setAdapter(new ImageAdapter(this));
26. //设置监听器
27. gallery.setOnItemClickListener(new OnItemClickListener() {
28. @Override
29. public void onItemClick(AdapterView<?>parent, View v, int position, long id) {
30. Toast.makeText(MainActivity.this, "点击了第"+(position+1)+"张图片", Toast.LENGTH_LONG).show();
31. }
32. });
33. }
34. }
35.
36. class ImageAdapter extends BaseAdapter{
37. //声明Context
38. private Context context;
39. //图片源数组
40. private Integer[] imageInteger={
41. R.drawable.pic1,
42. R.drawable.pic2,
43. R.drawable.pic3,
44. R.drawable.pic4,
45. R.drawable.pic5,
46. R.drawable.pic6,
47. R.drawable.pic7
48. };
49.
50. //声明 ImageAdapter
51. public ImageAdapter(Context c){
52. context = c;
53. }
54.
55. @Override
56. //获取图片的个数
57. public int getCount() {
58. return imageInteger.length;
59. }
60.
61. @Override
62. //获取图片在库中的位置
63. public Object getItem(int position) {
64.
65. return position;
66. }
67.
68. @Override
69. //获取图片在库中的位置
70. public long getItemId(int position) {
71. // TODO Auto-generated method stub
72. return position;
73. }
74.
75. @Override
76. public View getView(int position, View convertView, ViewGroup parent) {
77.
78. ImageView imageView = new ImageView(context);
79. //给ImageView设置资源
80. imageView.setImageResource(imageInteger[position]);
81. //设置比例类型
82. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
83. //设置布局 图片128x192显示
84. imageView.setLayoutParams(new Gallery.LayoutParams(128, 192));
85. return imageView;
86. }
87. }
88.
89.
main.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <Gallery xmlns:android="http://schemas.android.com/apk/res/android"
3. android:id="@+id/gallery"
4. android:layout_width="fill_parent"
5. android:layout_height="wrap_content"
6. android:gravity="center_vertical"
7. android:background="?android:galleryItemBackground"
8. />
9.
效果图:
Gallery和ImageSwitcher组件结合使用的例子:
MainActivity.java
1. package com.android.gallerytest;
2.
3. import android.app.Activity;
4. import android.content.Context;
5. import android.os.Bundle;
6. import android.view.View;
7. import android.view.ViewGroup;
8. import android.view.Window;
9. import android.view.animation.AnimationUtils;
10. import android.widget.AdapterView;
11. import android.widget.BaseAdapter;
12. import android.widget.Gallery;
13. import android.widget.ImageSwitcher;
14. import android.widget.ImageView;
15. import android.widget.AdapterView.OnItemSelectedListener;
16. import android.widget.Gallery.LayoutParams;
17. import android.widget.ViewSwitcher.ViewFactory;
18.
19. public class MainActivity extends Activity implements OnItemSelectedListener,
20. ViewFactory {
21.
22. private ImageSwitcher mSwitcher;
23. //大图片对应的缩略图源数组
24. private Integer[] mThumbIds = { R.drawable.sample_thumb_0,
25. R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,
26. R.drawable.sample_thumb_3, R.drawable.sample_thumb_4,
27. R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,
28. R.drawable.sample_thumb_7 };
29. //大图片源数组
30. private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1,
31. R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
32. R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
33.
34. @Override
35. public void onCreate(Bundle savedInstanceState) {
36. super.onCreate(savedInstanceState);
37. //设置窗口无标题
38. requestWindowFeature(Window.FEATURE_NO_TITLE);
39. setContentView(R.layout.main);
40. mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
41. //注意在使用一个ImageSwitcher之前,
42. //一定要调用setFactory方法,要不setImageResource这个方法会报空指针异常。
43. mSwitcher.setFactory(this);
44. //设置动画效果
45. mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
46. android.R.anim.fade_in));
47. mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
48. android.R.anim.fade_out));
49.
50. Gallery g = (Gallery) findViewById(R.id.gallery);
51.
52. //添加OnItemSelectedListener监听器
53. g.setAdapter(new ImageAdapter(this));
54. g.setOnItemSelectedListener(this);
55.
56. }
57. //创建内部类ImageAdapter
58. public class ImageAdapter extends BaseAdapter {
59. public ImageAdapter(Context c) {
60. mContext = c;
61. }
62. public int getCount() {
63. return mThumbIds.length;
64. }
65. public Object getItem(int position) {
66. return position;
67. }
68. public long getItemId(int position) {
69. return position;
70. }
71. public View getView(int position, View convertView, ViewGroup parent) {
72. ImageView i = new ImageView(mContext);
73.
74. i.setImageResource(mThumbIds[position]);
75. //设置边界对齐
76. i.setAdjustViewBounds(true);
77. //设置布局参数
78. i.setLayoutParams(new Gallery.LayoutParams(
79. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
80. //设置背景资源
81. i.setBackgroundResource(R.drawable.picture_frame);
82. return i;
83. }
84. private Context mContext;
85. }
86.
87. @Override
88. //实现onItemSelected()方法,更换图片
89. public void onItemSelected(AdapterView<?> adapter, View v, int position,
90. long id) {
91. //设置图片资源
92. mSwitcher.setImageResource(mImageIds[position]);
93. }
94.
95. @Override
96. public void onNothingSelected(AdapterView<?> arg0) {
97.
98. }
99.
100. @Override
101. //实现makeView()方法,为ImageView设置布局格式
102. public View makeView() {
103. ImageView i = new ImageView(this);
104. //设置背景颜色
105. i.setBackgroundColor(0xFF000000);
106. //设置比例类型
107. i.setScaleType(ImageView.ScaleType.FIT_CENTER);
108. //设置布局参数
109. i.setLayoutParams(new ImageSwitcher.LayoutParams(
110. LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
111. return i;
112. }
113. }
main.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:layout_width="fill_parent"
4. android:layout_height="fill_parent"
5. >
6. <ImageSwitcher
7. android:id="@+id/switcher"
8. android:layout_width="fill_parent"
9. android:layout_height="fill_parent"
10. android:layout_alignParentTop="true"
11. android:layout_alignParentLeft="true"
12. />
13. <Gallery
14. android:id="@+id/gallery"
15. android:background="#55000000"
16. android:layout_width="fill_parent"
17. android:layout_height="60dp"
18. android:layout_alignParentBottom="true"
19. android:layout_alignParentLeft="true"
20. android:gravity="center_vertical"
21. android:spacing="16dp"
22. />
23. </RelativeLayout>
24.
效果图:
二.GridView的简介
GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。
GridView常用的XML属性:
属性名称
描述
android:columnWidth
设置列的宽度。
android:gravity
设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical 可以多选,用“|”分开。
android:horizontalSpacing
两列之间的间距。
android:numColumns
设置列数。
android:stretchMode
缩放模式。
android:verticalSpacing
两行之间的间距。
下面有三个例子,第一个是只显示图片的,第二个是显示图片文字的(这里的图片是Android系统自带的图片),第三个是显示自定义的图片文字。前面两个例子的实现都不是很难,第三个例子的实现有些复杂,学习GridView的时候,就想着能不能自定义自己喜欢的图片加上文字,在网上找些资料,一般都是第二个例子的形式的,最后在视频学习上找到了能实现自定义自己的图片的例子。自己就照着例子去学习,修改成了第三个例子。
第一个例子:
MainActivity.java
1. package com.android.gridview.activity;
2.
3. import android.app.Activity;
4. import android.content.Context;
5. import android.os.Bundle;
6. import android.view.View;
7. import android.view.ViewGroup;
8. import android.widget.AdapterView;
9. import android.widget.AdapterView.OnItemClickListener;
10. import android.widget.BaseAdapter;
11. import android.widget.GridView;
12. import android.widget.ImageView;
13. import android.widget.Toast;
14.
15. public class MainActivity extends Activity {
16. @Override
17. public void onCreate(Bundle savedInstanceState) {
18. super.onCreate(savedInstanceState);
19. setContentView(R.layout.main);
20. GridView gv = (GridView)findViewById(R.id.GridView1);
21. //为GridView设置适配器
22. gv.setAdapter(new MyAdapter(this));
23. //注册监听事件
24. gv.setOnItemClickListener(new OnItemClickListener()
25. {
26. public void onItemClick(AdapterView<?> parent, View v, int position, long id)
27. {
28. Toast.makeText(MainActivity.this, "pic" + position, Toast.LENGTH_SHORT).show();
29. }
30. });
31. }
32. }
33. //自定义适配器
34. class MyAdapter extends BaseAdapter{
35. //上下文对象
36. private Context context;
37. //图片数组
38. private Integer[] imgs = {
39. R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
40. R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
41. R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
42. R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
43. R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
44. R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
45. };
46. MyAdapter(Context context){
47. this.context = context;
48. }
49. public int getCount() {
50. return imgs.length;
51. }
52.
53. public Object getItem(int item) {
54. return item;
55. }
56.
57. public long getItemId(int id) {
58. return id;
59. }
60.
61. //创建View方法
62. public View getView(int position, View convertView, ViewGroup parent) {
63. ImageView imageView;
64. if (convertView == null) {
65. imageView = new ImageView(context);
66. imageView.setLayoutParams(new GridView.LayoutParams(75, 75));//设置ImageView对象布局
67. imageView.setAdjustViewBounds(false);//设置边界对齐
68. imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//设置刻度的类型
69. imageView.setPadding(8, 8, 8, 8);//设置间距
70. }
71. else {
72. imageView = (ImageView) convertView;
73. }
74. imageView.setImageResource(imgs[position]);//为ImageView设置图片资源
75. return imageView;
76. }
77. }
78.
79.
80.
main.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:orientation="vertical"
4. android:layout_width="fill_parent"
5. android:layout_height="fill_parent"
6. >
7. <GridView
8. android:id="@+id/GridView1"
9. android:layout_width="wrap_content"
10. android:layout_height="wrap_content"
11. android:columnWidth="90dp"
12. android:numColumns="3"
13. android:verticalSpacing="10dp"
14. android:horizontalSpacing="10dp"
15. android:stretchMode="columnWidth"
16. android:gravity="center"
17. />
18. </LinearLayout>
效果图:
第二个例子:
MainActivity.java
1. package com.android.gridview2.activity;
2.
3. import java.util.ArrayList;
4. import java.util.HashMap;
5. import java.util.List;
6. import java.util.Map;
7. import android.app.Activity;
8. import android.os.Bundle;
9. import android.widget.GridView;
10. import android.widget.SimpleAdapter;
11.
12. public class MainActivity extends Activity {
13.
14. private GridView gv;
15. @Override
16. protected void onCreate(Bundle savedInstanceState) {
17. // TODO Auto-generated method stub
18. super.onCreate(savedInstanceState);
19. setContentView(R.layout.gridview);
20.
21. //准备要添加的数据条目
22. List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
23. for (int i = 0; i < 9; i++) {
24. Map<String, Object> item = new HashMap<String, Object>();
25. item.put("imageItem", R.drawable.icon);//添加图像资源的ID
26. item.put("textItem", "icon" + i);//按序号添加ItemText
27. items.add(item);
28. }
29.
30. //实例化一个适配器
31. SimpleAdapter adapter = new SimpleAdapter(this,
32. items,
33. R.layout.grid_item,
34. new String[]{"imageItem", "textItem"},
35. new int[]{R.id.image_item, R.id.text_item});
36.
37. //获得GridView实例
38. gv = (GridView)findViewById(R.id.mygridview);
39. //为GridView设置适配器
40. gv.setAdapter(adapter);
41.
42. }
43. }
gridview.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:layout_width="wrap_content"
4. android:layout_height="wrap_content"
5. >
6. <GridView
7. android:id="@+id/mygridview"
8. android:numColumns="3"
9. android:gravity="center_horizontal"
10. android:layout_width="wrap_content"
11. android:layout_height="wrap_content"
12. android:stretchMode="columnWidth"
13. />
14. </LinearLayout>
15.
grid_item.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:id="@+id/RelativeLayout1"
4. android:layout_width="wrap_content"
5. android:layout_height="fill_parent"
6. android:paddingBottom="6dip"
7. >
8. <ImageView
9. android:id="@+id/image_item"
10. android:layout_width="wrap_content"
11. android:layout_height="wrap_content"
12. android:layout_centerHorizontal="true"
13. />
14. <TextView
15. android:id="@+id/text_item"
16. android:layout_below="@+id/image_item"
17. android:layout_height="wrap_content"
18. android:layout_width="wrap_content"
19. android:layout_centerHorizontal="true"
20. />
21. </RelativeLayout>
22.
效果图:
第三个例子:
MainActivity.java
1. package com.android.gridview3;
2.
3. import java.util.ArrayList;
4. import java.util.List;
5. import android.app.Activity;
6. import android.content.Context;
7. import android.os.Bundle;
8. import android.view.LayoutInflater;
9. import android.view.View;
10. import android.view.ViewGroup;
11. import android.widget.AdapterView;
12. import android.widget.BaseAdapter;
13. import android.widget.GridView;
14. import android.widget.ImageView;
15. import android.widget.TextView;
16. import android.widget.Toast;
17. import android.widget.AdapterView.OnItemClickListener;
18.
19. public class MainActivity extends Activity
20. {
21. private GridView gridView;
22. //图片的文字标题
23. private String[] titles = new String[]
24. { "pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"};
25. //图片ID数组
26. private int[] images = new int[]{
27. R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
28. R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
29. R.drawable.pic7, R.drawable.pic8,R.drawable.pic9
30. };
31.
32. @Override
33. public void onCreate(Bundle savedInstanceState){
34. super.onCreate(savedInstanceState);
35. setContentView(R.layout.main);
36. gridView = (GridView) findViewById(R.id.gridview);
37. PictureAdapter adapter = new PictureAdapter(titles, images, this);
38. gridView.setAdapter(adapter);
39.
40. gridView.setOnItemClickListener(new OnItemClickListener()
41. {
42. public void onItemClick(AdapterView<?> parent, View v, int position, long id)
43. {
44. Toast.makeText(MainActivity.this, "pic" + (position+1), Toast.LENGTH_SHORT).show();
45. }
46. });
47. }
48. }
49. //自定义适配器
50. class PictureAdapter extends BaseAdapter{
51. private LayoutInflater inflater;
52. private List<Picture> pictures;
53.
54. public PictureAdapter(String[] titles, int[] images, Context context)
55. {
56. super();
57. pictures = new ArrayList<Picture>();
58. inflater = LayoutInflater.from(context);
59. for (int i = 0; i < images.length; i++)
60. {
61. Picture picture = new Picture(titles[i], images[i]);
62. pictures.add(picture);
63. }
64. }
65.
66. @Override
67. public int getCount()
68. {
69. if (null != pictures)
70. {
71. return pictures.size();
72. } else
73. {
74. return 0;
75. }
76. }
77.
78. @Override
79. public Object getItem(int position)
80. {
81. return pictures.get(position);
82. }
83.
84. @Override
85. public long getItemId(int position)
86. {
87. return position;
88. }
89.
90. @Override
91. public View getView(int position, View convertView, ViewGroup parent)
92. {
93. ViewHolder viewHolder;
94. if (convertView == null)
95. {
96. convertView = inflater.inflate(R.layout.picture_item, null);
97. viewHolder = new ViewHolder();
98. viewHolder.title = (TextView) convertView.findViewById(R.id.title);
99. viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
100. convertView.setTag(viewHolder);
101. } else
102. {
103. viewHolder = (ViewHolder) convertView.getTag();
104. }
105. viewHolder.title.setText(pictures.get(position).getTitle());
106. viewHolder.image.setImageResource(pictures.get(position).getImageId());
107. return convertView;
108. }
109.
110. }
111.
112. class ViewHolder
113. {
114. public TextView title;
115. public ImageView image;
116. }
117.
118. class Picture
119. {
120. private String title;
121. private int imageId;
122.
123. public Picture()
124. {
125. super();
126. }
127.
128. public Picture(String title, int imageId)
129. {
130. super();
131. this.title = title;
132. this.imageId = imageId;
133. }
134.
135. public String getTitle()
136. {
137. return title;
138. }
139.
140. public void setTitle(String title)
141. {
142. this.title = title;
143. }
144.
145. public int getImageId()
146. {
147. return imageId;
148. }
149.
150. public void setImageId(int imageId)
151. {
152. this.imageId = imageId;
153. }
154. }
main.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <GridView xmlns:android="http://schemas.android.com/apk/res/android"
3. android:id="@+id/gridview"
4. android:layout_width="fill_parent"
5. android:layout_height="fill_parent"
6. android:columnWidth="90dp"
7. android:numColumns="auto_fit"
8. android:verticalSpacing="10dp"
9. android:horizontalSpacing="10dp"
10. android:stretchMode="columnWidth"
11. android:gravity="center"
12. />
picture_item.xml
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout
3. xmlns:android="http://schemas.android.com/apk/res/android"
4. android:id="@+id/root"
5. android:orientation="vertical"
6. android:layout_width="wrap_content"
7. android:layout_height="wrap_content"
8. android:layout_marginTop="5dp"
9. >
10. <ImageView
11. android:id="@+id/image"
12. android:layout_width="100dp"
13. android:layout_height="150dp"
14. android:layout_gravity="center"
15. android:scaleType="fitXY"
16. android:padding="4dp"
17. />
18. <TextView
19. android:id="@+id/title"
20. android:layout_width="wrap_content"
21. android:layout_height="wrap_content"
22. android:layout_gravity="center"
23. android:gravity="center_horizontal"
24. />
25. </LinearLayout>
- Gallery和GridView 小结
- Gallery和GridView浅析
- Gallery和GridView浅析
- Gallery和GridView
- Gallery和GridView浅析
- GridView和Gallery基本用法
- android之GridView和Gallery
- Android的GridView和Gallery结合Demo
- Android的GridView和Gallery结合Demo
- GridView Gallery Spinner AutoCompleteTextView和ExpandableListView
- Android:Gallery,ImageSwitcher 和GridView用法
- Android开发学习笔记:Gallery和GridView浅析
- 【转载】Android的GridView和Gallery结合Demo
- Android开发学习笔记:Gallery和GridView浅析
- Android开发学习笔记:Gallery和GridView浅析
- Android开发学习笔记:Gallery和GridView浅析
- Android开发学习笔记:Gallery和GridView浅析
- ImageSwitcher&Gallery组件和GridView组件的使用
- Oracle11g的安装和基本使用
- mysql删除地址栏所指定的id
- HTML(XML)转义字符大全
- 走马观花 --- 网络身份认证协议Kerberos (一)
- BBS项目笔记之三:前台带分类的搜索框
- Gallery和GridView 小结
- 小车的移动的测试程序
- 类
- make xconfig无法使用
- 设计模式16:模板方法模式【行为型】
- 一道题_20121219
- 利用vmmare tools来实现XP和Linux文件共享
- slave 故障,用set_global 跳
- android学习中遇到的问题