android学习日记17--Gallery(画廊视图)
一、Gallery
1、简述
Gallery有道翻译为画廊,就叫它画廊控件,主要用来可切换的图片展示,左右滑动可以选择上一张或下一张图片。
个人感觉蛮实用的,不过google貌似不推荐使用啊!

2、常用属性和对应方法如下:

3、简单例子:
实现如下例子,C.C女王图片坐镇

Activity代码:
// 要展示图片的ID数组
int[] imageIDs={
R.drawable.item0,R.drawable.item1,R.drawable.item2,
R.drawable.item3,R.drawable.item4,R.drawable.item5
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Gallery gl=(Gallery)this.findViewById(R.id.Gallery01);
// 适配器
BaseAdapter ba=new BaseAdapter() { //主要是重写getView 方法
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ImageView iv = new ImageView(MainActivity.this); Log.v("gallery", position+""); iv.setImageResource(imageIDs[position]); iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(188,250));
return iv;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public int getCount() {
// TODO Auto-generated method stub //return imageIDs.length;
}
}; gl.setAdapter(ba); // 设置监听
gl.setOnItemClickListener(
new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Gallery gl=(Gallery)findViewById(R.id.Gallery01);
gl.setSelection(arg2);
}
}
); }
布局文件较简单:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
>
<Gallery
android:id="@+id/Gallery01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spacing="10dip"
android:unselectedAlpha="1" />
</LinearLayout>
4、扩展例子:
但是这样做有个弊端,就是图片滑动到最后一张就结束了,如果我想要查看第一张就得一张张的退回去
比较麻烦,不人性化。

我们要实现循环切换图片,从最后一张可跳到第一张去。这时就要修改getCount和getView方法
getCount方法用于返回图像总数,这个总数不能大于图像的实际数(可以小于图像的实际数),否则会抛出越界异常。
当Gallery组件要显示某一个图像时,就会调用getView方法,并将当前的图像索引(position参数)传入该方法。
一般getView方法用于返回每一个显示图像的组件(ImageView对象)。从这一点可以看出,Gallery组件是即时显示图像的,
而不是一下将所有的图像都显示出来。在getView方法中除了创建了ImageView对象,还用从imageIDs数组中获得了相应的图像资源ID来设置在ImageView中显示的图像。
实现循环切换主要就是当position等于最后一张图片时,它的下一张又回到第一张position = 0,这时我们想到了取余可以实现,
即position%imageIDs.length,值就在0~imageIDs.length-1之间,此时还要设置getCount的值为无穷大,防止抛出越界异常,
设return Integer.MAX_VALUE。
具体修改代码如下:
public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ImageView iv = new ImageView(MainActivity.this);
Log.v("gallery", position+"");
//iv.setImageResource(imageIDs[position]);
//通过取余来循环取得imageIDs数组中的图像资源ID
iv.setImageResource(imageIDs[position%imageIDs.length]);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(188,250));
return iv;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
//return imageIDs.length;
// 返回一个很大的值,例如,Integer.MAX_VALUE
return Integer.MAX_VALUE;
}
};
实现效果:

如果有人爱钻牛角尖就会发现,apk启动时第一张不能切换到最后一张。

我曾想getItemId返回的position一开始不是0,而是中间值就行了,比如设为position+imageIDs.length*10,在getView()传入position和getItemId返回的position设为position+imageIDs.length*10均告失败,日志打印的position初始值都为0,不起作用,还是不能跳到最后一张。后来上网搜了下Gallery有个setSelection可以设置当前position,加入代码,显示成功。
gl.setSelection(imageIDs.length*10);

android学习日记17--Gallery(画廊视图)的更多相关文章
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- Android BaseAdapter Gallery 画廊视图 (左右拖动图片列表拖至中间时图片放大显示)
画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Galle ...
- android学习日记06--View视图
一.android 界面开发 1.三个重要的类:View视图.Canvas画布.Paint画笔2.android 界面开发常用三种视图 View --只能在主线程中更新,没有缓存 ...
- <Android>列表、网格、画廊视图及适配器的绑定
列表视图和适配器的绑定 列表视图既可以使用ListView组件,也可以继承ListActivity.显示可以是ArrayAdapter,也可以是游标SimpleCursorAdapter,还可以是继承 ...
- android学习日记18--Adapter简介
一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...
- Android学习笔记27:网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- Android学习系列(17)--App列表之圆角ListView(续)
http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)- ...
随机推荐
- [转载]12款免费与开源的NoSQL数据库介绍
Naresh Kumar是位软件工程师与热情的博主,对于编程与新事物拥有极大的兴趣,非常乐于与其他开发者和程序员分享技术上的研究成果.近日,Naresh撰文谈到了12款知名的免费.开源NoSQL数据库 ...
- Compass 编译.scss文件的问题
compass 命令编译scss文件存在一个问题: 不能对"_"下划线开头的scss文件名称的文件进行编译.将"_"去掉就可以啦
- bzoj1789 AHOI 维护数列(线段树)
首先想到线段树,然后刚开始写忽然想到树状数组求和岂不是更快,而且编程复杂度又小,于是把之前写的删掉,写树状数组,写完模版之后忽然发现这题竟然是区间修改! 于是又删掉重写,忽然发现不会处理又加又乘的,果 ...
- [POJ 3420] Quad Tiling
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3495 Accepted: 1539 Des ...
- Android访问C#的WebService要注意的问题
@Overrideprotected String doInBackground(Object... params) { // 根据命名空间和方法得到SoapObject对象 SoapObject s ...
- android 三目运算符 运用错误
/************************************************************************** * android 三目运算符 运用错误 * 说 ...
- 解决java switch……case不能匹配字符串的问题
java1.7已经支持了匹配字符串 方案1. enum Animal { dog,cat,bear; public static Animal getAnimal(String animal){ re ...
- Java [leetcode 36]Valid Sudoku
题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...
- 移植mysql到嵌入式ARM平台
移植MySQL到嵌入式ARM平台 MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.p ...
- JQuery focus()
跳转到登陆页面时可以使用focus方法 <input name="login_account"id="login_account"class=" ...