在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动。Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最后一个图片为止。

  下面我们就通过一个实例来演示如何实现Gallery画廊控件功能。

1.xml布局

  在xml布局文件中,我们使用LinearLayout对整个界面进行垂直布局。在界面上端设置一个ImageView控件,用来显示当前选中的Gallery列表图片。在界面下端设置一个Gallery控件,用来显示Gallery列表图片。整个布局文件很简单,具体源码如下:

 1 <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"2     xmlns:tools="http://schemas.android.com/tools"3     android:orientation="vertical"4     android:layout_width="match_parent"5     android:layout_height="match_parent" >6 7     <ImageView8         android:id="@+id/imageView"9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"    >
11     </ImageView>
12
13     <Gallery
14         android:id="@+id/gallery"
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:spacing="2dp"
18         android:layout_marginTop="5dp"    >
19     </Gallery>
20
21 </LinearLayout>

  其中,在Gallery属性标签中,android:spacing="2dp"属性用于指定Gallery列表图片之间的间隔为2dp。

  程序运行后的效果如图1所示。

图1 主界面

2.ImageAdapter适配器

  要实现Gallery画廊控件功能,需要一个容器来存放Gallery显示的图片。我们可以使用一个继承自BaseAdapter类的派生类ImageAdapter来装这些图片。

  在ImageAdapter类中我们需要实现Adapter类中的如下四个抽象方法:

  (1)public int getCount();

  (2)public Object getItem(int position);

  (3)public long getItemId(int position);

  (4)public View getView(int position, View convertView, ViewGroup parent);

  其中,getCount()方法用于获取ImageAdapter适配器中图片个数;getItem()方法用于获取图片在ImageAdapter适配器中的位置;getItemId()方法用于获取图片在ImageAdapter适配器中位置;getView()用于获取ImageAdapter适配器中指定位置的视图对象。上述四个抽象方法的具体实现方法如下:

 1   /*2      * Function   :    ImageAdapter类,继承自BaseAdapter3      * Author     :    博客园-依旧淡然4      */5     public class ImageAdapter extends BaseAdapter {6 7         Context mContext;        //上下文对象8         9         //构造方法
10         public ImageAdapter(Context context) {
11             this.mContext = context;
12         }
13
14         //获取图片的个数
15         public int getCount() {
16             return mImageResourceIds.length;
17         }
18
19         //获取图片在库中的位置
20         public Object getItem(int position) {
21             return mImageResourceIds[position];
22         }
23
24         //获取图片在库中的位置
25         public long getItemId(int position) {
26             return position;
27         }
28
29         //获取适配器中指定位置的视图对象
30         public View getView(int position, View convertView, ViewGroup parent) {
31             ImageView imageView = new ImageView(mContext);
32             imageView.setImageResource(mImageResourceIds[position]);
33             imageView.setLayoutParams(new Gallery.LayoutParams(120, 120));
34             imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
35             return imageView;
36         }
37
38     }

  其中,imageView.setImageResource(mImageResourceIds[position])用于将ImageAdapter中的指定位置图片资源加载到imageView中。imageView.setLayoutParams(new Gallery.LayoutParams(120, 120))用于设置Gallery中图片的显示大小。imageView.setScaleType(ImageView.ScaleType.FIT_CENTER)用于设置imageView中图片的缩放显示格式。

3.加载适配器

  实现了ImageAdapter类之后,我们可以通过setAdapter()方法把资源文件添加到Gallery中进行显示即可。

4.Gallery事件监听器

  除此之外,为了在如图1所示的界面上端的ImageView控件中同步显示Gallery控件中的当前图片。还需要对Gallery控件进行事件监听,以便获知用户选中了Gallery控件中的哪一张图片。具体的实现方法如下:

1   mGallery.setOnItemClickListener(new OnItemClickListener() {
2       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
3             mImageView.setBackgroundResource(mImageResourceIds[arg2]);
4        }
5    });

相关资料:

Android控件之Gallery图片集

http://www.cnblogs.com/salam/archive/2010/10/06/1844564.html

Android Gallery组件详解

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182297

Android控件Gallery 3D效果

http://android.tgbus.com/Android/tutorial/201108/362438.shtml

AndroidGUI21:ImageSwitcher常用技巧

http://blog.csdn.net/pathuang68/article/details/6541823

转载于:https://www.cnblogs.com/britalient/p/3173217.html

Android学习笔记25-画廊控件Gallery的使用相关推荐

  1. Android开发学习笔记-自定义组合控件

    为了能让代码能够更多的复用,故使用组合控件.下面是我正在写的项目中用到的方法. 1.先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中. <?xml version="1. ...

  2. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  3. vb.net listview 删除选定行_VBA学习笔记59-1: listview控件

    学习资源:<Excel VBA从入门到进阶>第59集 by兰色幻想 本节学习Listview控件,它可以用多种视图方式显示项目的控件.由于其外形美观而且非常实用,所以使用频率很高. Lis ...

  4. ASP.NET 学习笔记_01 广告控件的使用

    广告控件的使用: 广告文件是一个XML文件,广告文件中所有的标签属性被分析后放到adProperties字典中,用以属性编辑. ads.xml 1 <?xml version="1.0 ...

  5. JavaFX 学习笔记——窗口与控件

    前言 如今比较流行的桌面gui框架有WPF.WinForm.Qt.javafx等.其中WPF和WinForm目前还只能在运行Winsows上.Qt(widget)是一个很强大的跨平台C++框架(不只是 ...

  6. kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件

    学习资源:<Excel VBA从入门到进阶>第60集 by兰色幻想 本节讲Treeview控件. TreeView控件是以树形结构显示数据的控件.利用TreeView控件,可以设计出树形结 ...

  7. android横向滑动控件,Android学习——HorizontalScollview水平滚动控件

    HorizatalScollView控件只是支持水平滚动,而且它只能包含一个控件,通常是在标签中定义一个 标签并且在标签中android:orientation属性值设置为horization.然后在 ...

  8. Qt学习笔记之常用控件QlistWidget

    一.QListWidget Class The QListWidget class provides an item-based list widget. More... Header: #inclu ...

  9. LVGL v8学习笔记 | 06 - label控件的使用方法

    文章目录 一.label控件 1. 创建label对象 2. 设置label的文本 3. 获取label文本 4. label的大小 5. label的样式 6. label的事件 二.label控件 ...

  10. 【MFC】学习笔记:常用控件之组合框(Combo Box)

    01.目录 目录 01.目录 02.控件介绍 03.控件的消息通知函数 04.创建组合框控件及成员函数介绍 4.1 组合框的创建 4.2 CComboBox类的主要成员函数 05.应用实例 06.总结 ...

最新文章

  1. 洛奇6里很喜欢的一段话!洛奇6经典台词!而是你能挨多重,并且坚持向前,你能承受多少并且坚持向前,这样才叫胜利!
  2. 高通总裁:物联网和云计算正改变游戏规则
  3. CentOS Linux 7 安全基线设置
  4. Hyperic HQ HQU 插件开发指南
  5. mysql基础(3)-高级查询
  6. Go 语言:我那么值钱,我骄傲了吗?
  7. 图形图像技术在手游中的潜在应用
  8. entity-model-first
  9. linux 查杀php木马,linux上php木马、后门查杀总结
  10. PLSQL没有链接为解决办法
  11. 使用Elasticsearch,Kafka和Cassandra构建流式数据中心
  12. 对付ring0 inline hook
  13. MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别
  14. open读取文件操作
  15. 二八定律 80/20法则 帕累托法则、帕累托定律、马特莱定律、最省力法则或不平衡原则
  16. 【元胞自动机】基于matlab元胞自动机地铁火灾疏散模型【含Matlab源码 246期】
  17. 阿里云 Aliplayer高级功能介绍(三):多字幕 1
  18. 【电泳仪品牌】生科必知的电泳仪品牌
  19. java 对接微信公众号(一)获取token
  20. 业务需求与系统需求的区别

热门文章

  1. root用户配置免密登录_ssh免密登录(普通用户和root用户)
  2. 并发编程---填充缓存行消除伪共享
  3. 数据库基础(3)函数依赖-平凡依赖,完全依赖,部分依赖,传递依赖
  4. pc微信登录扫码显示无法连接服务器,WeAuth微信小程序实现PC网站扫码授权登录...
  5. 使用DNSStager在DNS中隐藏Payload
  6. Java多线程讲解,超详细!可获取相关笔记
  7. Openstack Nova network
  8. 详解对密码执行散列和 salt 运算方法
  9. ABAP:SmartForms 之二--设计
  10. nacos更换数据库为mysql