原文地址:http://my.oschina.net/amigos/blog/62690

继承关系

public class Gallery extends AbsSpinner

implements GestureDetector.OnGestureListener

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsSpinner

android.widget.Gallery

Gallery控件也可翻译为画廊组件,主要用于横向显示图像列表。我们通过查看Gallery类的继承结构,发现Gallery与我们之间讲解过的Spinner有共同的父类:AbsSpinner。从某种意义上来说,Gallery和Spinner都是一个列表框,只不过Spinner是一个垂直显示的列表模型,而Gallery则是一个水平显示的列表框。当然Gallery主要是通过用户拖动来展示一组图片或其它组件,而Spinner则是提供选择让用户选择。

Gallery的用户也与Spinner相似,只需要为它提供一个内容Adapter即可,该Adapter的getView()方法返回的View将作为Gallery组件的列表项。如果需要监听Gallery选择项的改变,则为Gallery添加OnItemSelectedListener监听器即可。

Gallery(画廊)使用Theme_galleryItemBackground作为Gallery(画廊)适配器中的各视图的默认参数。如果你没有设置,你就需要调整一些Gallery(画廊)的属性,比如间距。Gallery(画廊)中的视图应该使用Gallery.LayoutParams作为它们的布局参数类型。参见Gallery tutorial

内部类

class                   Gallery.LayoutParams

Gallery(画廊)扩展了LayoutParams,以此提供可以容纳当前的转换信息和先前的位置转换信息的场所。

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”。

公共方法

public boolean dispatchKeyEvent (KeyEvent event)

在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点,就分发给自身。否则,就分发到下一个节点的焦点路径上。该方法监听任何按钮事件。

参数

event        被分发的按钮事件

返回值

boolean    时间被处理返回true,否则false

public void dispatchSetSelected (boolean selected)

分发setSelected给视图的子类。

参数

selected   新选中的状态

public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一个新的已设置属性集合的布局参数。

参数

attrs                   用于生成布局参数的属性集合

返回值

一个ViewGroup.LayoutParams实例或者它的子类

public boolean onDown (MotionEvent e)

当轻击和按下手势事件发生时通知该方法。任何按下事件都会直接触发该方法。所有其他的事件都要先于该方法。

参数

e       按下动作事件

public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

当初始化的按下动作事件和松开动作事件匹配时通知fling(译者注:快滑,用户按下触摸屏、快速移动后松开)事件。该动作的速度通过计算X和Y轴上每秒移动多少像素得来。

参数

e1     导致开始fling的按下动作事件。

e2     触发当前onFling方法的移动动作事件

velocityX  测量fling沿X轴上的速度,像素/每秒

velocityY  测量fling沿Y轴上的速度,像素/每秒

返回值

如果该事件被消耗返回true,否则false。

public boolean onKeyDown (int keyCode, KeyEvent event)

处理左,右和点击事件

参数

keyCode   代表按下按钮的按键码,来自KeyEvent

event        定义按钮动作的KeyEvent对象。

返回值

如果已经处理了按钮事件,则返回true。如果你想让下一个事件接收者处理,就返回false

参见

onKeyDown(int, KeyEvent)

public boolean onKeyUp (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple()方法的默认实现:当KEYCODE_DPAD_CENTER 或者 KEYCODE_ENTER被释放时,执行点击视图操作。

参数

keyCode   代表按下按钮的按键码,来自KeyEvent

event        定义按钮动作的KeyEvent对象。

返回值

如果已经处理了按钮事件,则返回true。如果你想让下一个事件接收者处理,就返回false

public void onLongPress (MotionEvent e)

MotionEvent初始化并按下触发长按并通知本方法

参数

e       导致开始长按的初始按下动作事件。

public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

当初始按下动作事件和当前移动动作事件导致滚动时通知本方法。为了方便提供了X和Y轴上的距离。

监听屏幕滚动事件。为了方便提供了X和Y轴上的距离。

参数

e1   导致滚动开始按下的动作事件。

e2   触发当前onScroll方法的移动动作事件。

distanceX        距离是自上一次调用onScroll方法在X轴上的距离。不是e1 和e2之间的距离。

distanceY        距离是自上一次调用onScroll方法在Y轴上的距离。不是e1 和e2之间的距离。

返回值

如果该事件被消耗返回true否则false

public void onShowPress (MotionEvent e)

用户已经执行按下动作还没有执行移动或者弹起动作。该事件常通过高亮一个元素来向用户提供一个视觉反馈即用户的操作已经被辨识了。

参数

e       按下动作事件

public boolean onSingleTapUp (MotionEvent e)

在轻击动作和up动作事件触发时通知本方法。(译者注:点击屏幕上的某项的执行流程  有两种情况,一种是时间很短,一种时间稍长:时间很短:onDown--->onSingleTapUp--->onSingleTapConfirmed,见这里1,这里2。)

参数

e       完成开始轻击的up动作事件

返回值

如果该事件被消耗返回true否则false

public boolean onTouchEvent (MotionEvent event)

实现该方法来处理触摸屏动作事件

参数

event        动作事件

返回值

如果该事件被消耗返回true否则false

public void setAnimationDuration (int animationDurationMillis)

设置当子视图改变位置时动画转换时间。仅限于动画开始时生效。

参数

animationDurationMillis          动画转换时间(毫秒级)

public void setCallbackDuringFling (boolean shouldCallback)

当flinged时是否回调每一个getOnItemSelectedListener()。如果设为false,只回调最终选中的项。如果为true,则所有的项都会回调。

参数

shouldCallback         设置抛滑的过程中是否回调

public void setGravity (int gravity)

描述子视图的对齐方式。

public void setSpacing (int spacing)

设置Gallery中项的间距

参数

spacing    Gallery中项的间距,以像素为单位

public void setUnselectedAlpha (float unselectedAlpha)

设置Gallery中未选中项的透明度(alpha)值。

参数

unselectedAlpha      未选中项的透明度(alpha)值

public boolean showContextMenu ()

显示该视图上下文菜单。

返回值

上下文菜单是否显示。

public boolean showContextMenuForChild (View originalView)

为指定的视图或者其父类显示上下文菜单。

大部分情况下,子类不需要重写该方法。但是,如果子类被直接添加到窗口管理器(例如:addView(View.android.view.ViewGroup.LayoutParams)),此时就需要重写来显示上下文菜单

参数

originalView    上下文菜单初次调用的源视图

返回值

如果上下文菜单被显示了 则返回true。

受保护方法

protected int computeHorizontalScrollExtent ()

在水平范围内计算滚动条滑块的滚动范围。该值用来计算滚动条滑块的长度。

该范围可以使用任意的单位但是必须跟computeHorizontalScrollRange()computeHorizontalScrollOffset()的单位保持一致。

默认范围是视图的宽度。

返回值

滚动条滑块的水平滚动范围

protected int computeHorizontalScrollOffset ()

在水平范围内计算滚动条滑块的偏移量。该值用来计算水平滑块的位置。

该范围可以使用任意的单位但是必须跟computeHorizontalScrollRange()computeHorizontalScrollExtent()的单位保持一致。

默认偏移量是视图的偏移量。

返回值

滚动条滑块的水平偏移量。

protected int computeHorizontalScrollRange ()

计算滚动条水平方向上的滚动范围。

该范围可以使用任意的单位但是必须跟computeHorizontalScrollExtent()computeHorizontalScrollOffset()的单位保持一致。

返回值

水平滚动条代表的滑动总范围。

protected void dispatchSetPressed (boolean pressed)

分发 setPressed到View的子类。

参数

pressed    新按下的状态

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回默认的布局参数。当View作为参数传递给addView(View)而没有布局参数时就会请求这些参数。如果返回null,则addView会抛出异常。

返回值

默认的布局参数或null

protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

返回一组合法的受支持的布局参数。当把ViewGroup传递给View而该View的布局参数并没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)的测试时,就会调用该方法。该方法应该返回一组适合该ViewGroup的新的布局参数,该过程可能需要从指定的一组布局参数中复制相关的属性。

参数

p       被转换成适合该ViewGroup的一组参数。

返回值

返回一个ViewGroup.LayoutParams的实例或者一个它的子类。

protected int getChildDrawingOrder (int childCount, int i)

返回迭代的绘制子类索引。如果你想改变子类的绘制顺序就要重写该方法。默认返回 i 值。

提示:为了能够调用该方法,你必须首先调用setChildrenDrawingOrderEnabled(boolean)来允许子类排序。

参数

childCount        子类个数

i        当前迭代顺序

返回值

绘制该迭代子类的索引

protected boolean getChildStaticTransformation (View child, Transformation t)

(译者注:setStaticTransformationsEnabled这个属性设成true的时候每次viewGroup(看Gallery的源码就可以看到它是从ViewGroup间接继承过来的)在重新画它的child的时候都会促发getChildStaticTransformation这个函数。这里1、这里2)

protected ContextMenu.ContextMenuInfo getContextMenuInfo ()

Views如果有额外的信息跟上下文菜单有联系的话就需要实现该方法。返回的结果被用作回调方法onCreateContextMenu(ContextMenu, View, ContextMenuInfo)的参数。

返回值

显示上下文菜单的条目的额外信息。这些信息将会改变View不同的子类

protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)

当该视图的焦点状态发生改变时将会调用视图系统。当导向的方向触发焦点事件时,方向和先前获得焦点的矩形提供焦点事件的来源。当用户重写该方法,必须调用父类方法来触发标准的焦点处理事件。

参数

gainFocus                   如果View获得焦点为true,否则false

direction         当调用requestFocus()方法来给该视图焦点时焦点的移动方向。该值:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT 或 FOCUS_RIGHT。该参数不常用,通常使用它的默认值。

previouslyFocusedRect    该视图坐标系统中先前获得焦点的视图的矩形。如果适用,这将获得焦点事件来源的更细致的信息(除了方向以外)。否则为null。

protected void onLayout (boolean changed, int l, int t, int r, int b)

当视图为每一个子类分配大小和位置时从布局中调用该方法。有子类的派生类应该重写该方法在子类中调用布局。

参数

changed   该视图新的大小和位置。

l        相对父容器的左侧位置

t        相对父容器的顶部位置

r        相对父容器的右侧位置

b       相对父容器的底部位置

补充

文章精选

Android开发——使用Gallery实现“多级联动”

android 图片拖动效果(Gallery)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

简介:

这是一个非常炫的效果,可以用手指直接拖动图片移动,要实现这一效果,就必须有一个容器来存放Gallery索要显示的图片。这里使用一个继承自BaseAdapter的派生类来装这些图片。我们需要监听其事件setOnItemClickListener,从而确定当前用户选择了那一张图片。首先,我们需要将显示的图片的索引存放在一个int数组中。然后通过setImageResource方法来设置ImageView要显示的图片资源。最后将每张图片的ImageView显示在屏幕上。

案例一:

首先定义一个布局文件gallery.xml如下:

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android" rel="nofollow">http://schemas.android.com/apk/res/android</a>"
03     android:layout_width="fill_parent"
04     android:layout_height="fill_parent"
05     android:orientation="vertical" >
06     <ImageView
07         android:id="@+id/gallery_imageview_id"
08         android:layout_width="match_parent"
09      android:layout_height="wrap_content"
10      android:src="@drawable/gallery_01"
11          
12         />
13    <Gallery
14         android:id="@+id/gallery_id"
15         android:layout_width="match_parent"
16      android:layout_height="wrap_content"
17      android:background="?android:galleryItemBackground"
18  />
19 </LinearLayout>

2.java代码GalleryDemo.java文件:

1 package com.test;
01 import android.app.Activity;
02 import android.content.ClipData.Item;
03 import android.content.Context;
04 import android.content.res.TypedArray;
05 import android.os.Bundle;
06 import android.view.ContextMenu;
07 import android.view.MenuItem;
08 import android.view.View;
09 import android.view.ContextMenu.ContextMenuInfo;
10 import android.view.ViewGroup;
11 import android.widget.AdapterView;
12 import android.widget.AdapterView.AdapterContextMenuInfo;
13 import android.widget.AdapterView.OnItemClickListener;
14 import android.widget.BaseAdapter;
15 import android.widget.Gallery;
16 import android.widget.ImageView;
17 import android.widget.Toast;
01 public class GalleryDemo extends Activity {
02   
03  private  Gallery  gallery;
04  private  Integer[]  imageids=
05  {
06       R.drawable.gallery_01,R.drawable.gallery_02,R.drawable.gallery_03,
07       R.drawable.gallery_04,R.drawable.gallery_05,R.drawable.gallery_06
08  };
09  @Override
10  protected void onCreate(Bundle savedInstanceState)
11  {
12   // TODO Auto-generated method stub
13   super.onCreate(savedInstanceState);
14    
15   setContentView(R.layout.gallery);
16    
17   gallery= (Gallery)findViewById(R.id.gallery_id);
18   //设置图片适配器
19   gallery.setAdapter(new ImageAdapter(this));
20    
21   gallery.setSpacing(6);
22    
23   //设置监听器
24   gallery.setOnItemClickListener(listener);
25    
26  }
27  private  OnItemClickListener  listener =new OnItemClickListener() {
01  @Override
02  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
03  {
04 //  toast("点击了"+arg2+"张图片");
05   ImageView imageView = (ImageView)findViewById(R.id.gallery_imageview_id);
06   imageView.setImageResource(imageids[arg2]);
07  }
08 };
09   
10  @Override
11  public void onCreateContextMenu(ContextMenu menu, View v,
12    ContextMenuInfo menuInfo)
13  {
14   // TODO Auto-generated method stub
15   super.onCreateContextMenu(menu, v, menuInfo);
16   menu.add("Action");
17  }
18   
19  @Override
20  public boolean onContextItemSelected(MenuItem item) {
21   // TODO Auto-generated method stub
22 //  return super.onContextItemSelected(item);
23   AdapterContextMenuInfo  info = (AdapterContextMenuInfo)item.getMenuInfo();
24    
25   Toast.makeText(this"LOngPress"+info.position, Toast.LENGTH_LONG).show();
26    
27   return  true;
28    
29  }
30   
31   
32  public class ImageAdapter extends  BaseAdapter{
01   int  galleryItemBackgroud;
02   private  Context context;
03   //图片数组
04    
05    
06   public ImageAdapter(Context c)
07   {
08    context=c;
09   }
10   //获取图片的个数
11   @Override
12   public int getCount() {
13    // TODO Auto-generated method stub
14    return imageids.length;
15   }
16         //获取图片在库中的位置
17   @Override
18   public Object getItem(int position) {
19    // TODO Auto-generated method stub
20    return position;
21   }
22         //获取图片的ID
23   @Override
24   public long getItemId(int position) {
25    // TODO Auto-generated method stub
26    return position;
27   }
01   @Override
02   public View getView(int position, View convertView, ViewGroup parent) {
03     
04    ImageView  imageView = new ImageView(context);
05      //给imageVIew设置资源
06    imageView.setImageResource(imageids[position]);
07    //设置显示比例类型
08    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
09    //设置布局图片对象Imageview的宽度和高度120*80
10    imageView.setLayoutParams(new Gallery.LayoutParams(50,100));
11    
12    // TODO Auto-generated method stub
13    return imageView;
14   }
15   }
16  }

3.运行效果:

Gallary(中)相关推荐

  1. android 图库开发实例,Android中从图库中选取图片实例详解

    android 从图库中选取图片 在android中,如何从图库gallary中挑选图片呢,其实很简单,步骤如下 1) 设计一个imageview,用来显示图库选出来的图片 android:orien ...

  2. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  3. [论文笔记]CVPR2017_Joint Detection and Identification Feature Learning for Person Search

    Title: Joint Detection and Identification Feature Learning for Person Search; aXiv上该论文的第一个版本题目是 End- ...

  4. 国内外知识图谱相关公司简介

    这是 阿拉灯神丁Vicky 的第013 篇文章 全文1278字24图,预计阅读10分钟 国内外知识图谱相关公司产品浅析 国内: 1,海翼知PlantData  网址:https://www.plant ...

  5. Flasheezy:免费Flash资源站点

    Flasheezy 是一个提供免费Flash资源站点. Flasheezy 在其Gallary 中收集了大量的优秀的矢量图片的缩略图. 你可以按照名字进行查找: 按照不同的分类进行浏览: 按照下载数, ...

  6. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  7. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  8. Android中3D gallary的实现

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) Gallery3DActivity: package com.test3dgallary;import and ...

  9. Android中实现整个视图切换的左右滑动效果

    Android中提供了一个Gallary,可以实现图片或者文本的左右滑动效果. 如何让整个视图都能实现左右滑动,达到类似于Gallary的效果呢?可以直接用一个开源的ViewFlow来实现.   项目 ...

最新文章

  1. 阿里云配置tornado无法访问
  2. SAP Spartacus 捕捉 PageEvent 的方式
  3. 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
  4. 去快捷方式小箭头_电脑桌面如何快速去掉快捷方式小箭头
  5. 入微:探究文档中找不到的12c并行索引扫描新特性
  6. 实践分享丨物联网操作系统中的任务管理
  7. 花花的礼物 (huahua)
  8. 漫画 | 程序员联名把产品经理告上县衙,并列了8大罪状(下)
  9. Linux下安装Redis及使用
  10. python的整除运算_Python3基础 ** 幂运算 // 整除运算
  11. (ZT)关于IAP防止破解的几点
  12. Gradle下载及安装,配置IDEA
  13. 计算机电源模式怎么删,电脑的电源选项里只剩下了平衡模式怎么办?
  14. scratch炫酷格斗游戏
  15. Excel不能自动求和的可能原因
  16. 安卓平板“枯木回春”,vivo能分杯羹吗?
  17. 64K方法数限制原理与解决方案总结
  18. 这怎么可能:一千年前世界与中国差距有多大?
  19. UE4:浅谈什么是GamePlay框架
  20. 一元四次方程求解C++实现

热门文章

  1. 月份,星期几的英文表示
  2. python图片自动上色_老旧黑白片修复机——使用卷积神经网络图像自动着色实战(附PyTorch代码)...
  3. PMCAFF微课17期 - 教你如何用数据玩转移动互联网APP运营(笔记下载)
  4. 科大奥瑞物理实验——傅里叶光学
  5. 2、Terraform-安装
  6. 总结5个比较好用的app开发工具
  7. 少儿学编程系列---如何使用turtle画鸡蛋
  8. 响应式编程之一:概述
  9. Stars in Your Window 【POJ - 2482】【线段树扫描线】
  10. ERP与PDM集成基本原理