一、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(画廊视图)的更多相关文章

  1. android学习日记05--Activity间的跳转Intent实现

    Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...

  2. android学习日记03--常用控件Dialog

    常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...

  3. android学习日记03--常用控件checkbox/radiobutton

    常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...

  4. android学习日记03--常用控件button/imagebutton

    常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...

  5. Android BaseAdapter Gallery 画廊视图 (左右拖动图片列表拖至中间时图片放大显示)

    画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Galle ...

  6. android学习日记06--View视图

    一.android 界面开发 1.三个重要的类:View视图.Canvas画布.Paint画笔2.android 界面开发常用三种视图 View            --只能在主线程中更新,没有缓存 ...

  7. <Android>列表、网格、画廊视图及适配器的绑定

    列表视图和适配器的绑定 列表视图既可以使用ListView组件,也可以继承ListActivity.显示可以是ArrayAdapter,也可以是游标SimpleCursorAdapter,还可以是继承 ...

  8. android学习日记18--Adapter简介

    一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...

  9. Android学习笔记27:网格视图GridView的使用

    网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...

  10. Android学习系列(17)--App列表之圆角ListView(续)

    http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html   本来这篇文章想并到上篇Android学习系列(16)- ...

随机推荐

  1. 在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例

    学习帮助文档大全 jquery,css,Android中文开发文档,JScript,SQL掌用实例 http://api.jq-school.com/

  2. 自定义View 实现软键盘实现搜索

    1. xml文件中加入自定义 搜索view <com.etoury.etoury.ui.view.IconCenterEditText android:id="@+id/search_ ...

  3. 【 D3.js 高级系列 — 3.0 】 堆栈图

    堆栈图布局(Stack Layout)能够计算二维数组每一数据层的基线,以方便将各数据层叠加起来.本文讲解堆栈图的制作方法. 先说说什么是堆栈图. 例如,有如下情况: 某公司,销售三种产品:个人电脑. ...

  4. Java [leetcode 36]Valid Sudoku

    题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  5. MYSQL学习心得

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. js变量作用域

    for(var i =0;i<100;i++) { } alert(i);//100 if(true){ var i="91d"; } alert(i);//91d func ...

  7. 【转】Tomcat配置文件入门

    Tomcat 基本配置 tomcat读取配置文件 首先简单说一下tomcat是如何读取配置文件的.tomcat在启动时,首先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOM ...

  8. .net 禁止远程查看应用程序错误的详细信息,服务器上出现应用程序错误

    打开页面时出现以下错误   "/"应用程序中的服务器错误. 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全 ...

  9. 《C Primer Plus 第五版》读书笔记

    CH1-2:概述 链接器:链接库代码.启动代码(start-up code) CH3-5:数据.字符串.运算符 1 数据类型存储方式:整数类型.浮点数类型 2 浮点数存储:小数部分+指数部分 3 in ...

  10. HW7.3

    public class Solution { public static void main(String[] args) { char[][] answers = { {'A', 'B', 'A' ...