Android 自学之画廊视图(Gallery)功能和用法

Gallery与之前讲的Spinner有共同的父类:AbsSpinner,表明Gallery和Spinner都是一个列表框。他们之间的区别在于Spinner显示的是一个垂直的列表框,而Gallery显示的是一个水平的列表框。Gallery与Spinner有一个区别:Spinner的作用是供用户选择,而Gallery则允许用户通过拖动来查看上一个、下一个列表项。

Gallery常用的XML属性及相关方法

XML属性 相关方法 说明
android:animationDuration setAnimationDuration(int) 设置列表项切换时的动画持续时间
android:gravity setGravity(int) 设置对齐方式
android:spacing setSpacing(int) 设置Gallery内列表项之间的间距
android:unselectedAlpha setUnselectedAlpha(int) 设置没有选中列表项的透明性

Gallery本身的用法非常简单----基本上和Spinner的用法相似,只要为他提供一个内容Adapter即可,该Adapter的getView方法返回的View作为Gallery列表的列表项;如果程序需要监控到Gallery选择项的改变,可以通过为Gallery添加OnItemSelectedListener监听器即可实现。

为此做了一个关于“幻灯片”式图片浏览器的案例,这个案例和我们前面写的Android 自学之网格试图(GridView)和图片切换器(ImageSwitcher)功能和用法这个里面的案例很相似;二者都是带有预览图片的效果,但本案例采用Gallery作为图片预览器,所以界面会更加的友好。Gallery会生成一个“水平列表”,每个列表项就是一张图片预览,而Gallery生成“水平列表”可以让用户拖动来切换列表项。

下面我们先看看案例的布局部分的代码:Layout/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 <!-- 定义一个ImageSwitcher组件 -->
 7 <ImageSwitcher android:id="@+id/switcher"
 8     android:layout_width="320dp"
 9     android:layout_height="320dp"
10     />
11 <!-- 定义一个Gallery组件 -->
12 <Gallery android:id="@+id/gallery"
13     android:layout_width="fill_parent"
14     android:layout_height="wrap_content"
15     android:layout_marginTop="25dp"
16     android:unselectedAlpha="0.6"
17     android:spacing="3pt"
18     />
19 </LinearLayout>

上面的布局很简单,只定义了两个组件:ImageSwitcher和Gallery组件。主程序也很简单,为ImageSwitcher传入一个ViewFactory对象,为Gallery传入一个Adapter对象。这样ImageSwitcher和Gallery就可以工作了。

为了让ImageSwitcher可以显示Gallery中选中的图片,为Gallery绑定一个叫做OnItemSelectedListener监听。

主程序:GalleryTest.java

  1 package com.yangjing.gallarytest;
  2
  3 import android.app.Activity;
  4 import android.content.res.TypedArray;
  5 import android.os.Bundle;
  6 import android.view.View;
  7 import android.view.ViewGroup;
  8 import android.view.ViewGroup.LayoutParams;
  9 import android.view.animation.AnimationUtils;
 10 import android.widget.AdapterView;
 11 import android.widget.AdapterView.OnItemSelectedListener;
 12 import android.widget.BaseAdapter;
 13 import android.widget.Gallery;
 14 import android.widget.ImageSwitcher;
 15 import android.widget.ImageView;
 16 import android.widget.ViewSwitcher.ViewFactory;
 17
 18 public class GallaryTest extends Activity{
 19
 20     int[] imageIds = new int[]
 21     {
 22         R.drawable.shuangzi, R.drawable.shuangyu,
 23         R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,
 24         R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,
 25         R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,
 26         R.drawable.mojie };
 27
 28     @Override
 29     public void onCreate(Bundle savedInstanceState)
 30     {
 31         super.onCreate(savedInstanceState);
 32         setContentView(R.layout.main);
 33         final Gallery gallery = (Gallery) findViewById(R.id.gallery);
 34         // 获取显示图片的ImageSwitcher对象
 35         final ImageSwitcher switcher = (ImageSwitcher)
 36             findViewById(R.id.switcher);
 37         // 为ImageSwitcher对象设置ViewFactory对象
 38         switcher.setFactory(new ViewFactory()
 39         {
 40             @Override
 41             public View makeView()
 42             {
 43                 ImageView imageView = new ImageView(GallaryTest.this);
 44                 imageView.setBackgroundColor(0xff0000);
 45                 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
 46                 imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
 47                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
 48                 return imageView;
 49             }
 50         });
 51         // 设置图片更换的动画效果
 52         switcher.setInAnimation(AnimationUtils.loadAnimation(this,
 53             android.R.anim.fade_in));
 54         switcher.setOutAnimation(AnimationUtils.loadAnimation(this,
 55             android.R.anim.fade_out));
 56         // 创建一个BaseAdapter对象,该对象负责提供Gallery所显示的图片
 57         BaseAdapter adapter = new BaseAdapter()
 58         {
 59             @Override
 60             public int getCount()
 61             {
 62                 return imageIds.length;
 63             }
 64             @Override
 65             public Object getItem(int position)
 66             {
 67                 return position;
 68             }
 69             @Override
 70             public long getItemId(int position)
 71             {
 72                 return position;
 73             }
 74
 75             // 该方法的返回的View就是代表了每个列表项
 76             @Override
 77             public View getView(int position, View convertView, ViewGroup parent)
 78             {
 79                 // 创建一个ImageView
 80                 ImageView imageView = new ImageView(GallaryTest.this);
 81                 imageView.setImageResource(imageIds[position % imageIds.length]);
 82                 // 设置ImageView的缩放类型
 83                 imageView.setScaleType(ImageView.ScaleType.FIT_XY);
 84                 imageView.setLayoutParams(new Gallery.LayoutParams(75, 100));
 85                 TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
 86                 imageView.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));
 87                 return imageView;
 88             }
 89         };
 90         gallery.setAdapter(adapter);
 91         gallery.setOnItemSelectedListener(new OnItemSelectedListener()
 92         {
 93             // 当Gallery选中项发生改变时触发该方法
 94             @Override
 95             public void onItemSelected(AdapterView<?> parent, View view,
 96                 int position, long id)
 97             {
 98                 switcher.setImageResource(imageIds[position % imageIds.length]);
 99             }
100
101             @Override
102             public void onNothingSelected(AdapterView<?> parent)
103             {
104             }
105         });
106     }
107 }

程序运行后的效果展示:

Android 自学之画廊视图(Gallery)功能和用法

时间: 2024-10-09 22:13:47

Android 自学之画廊视图(Gallery)功能和用法的相关文章

Android 自学之滚动视图ScrollView

滚动视图ScrollView由FarmeLayout派生而出,他就是一个用于为普通组件添加垂直滚动条的组件:ScrollView里面最多包含一个组件,而ScrollView的作用就是为该组件添加一个垂直滚动条.(ScrollView的作用和JScrollPane非常相似,他们甚至不能被称为真正的容器.他们只是为其他的容器添加滚动条.)默认的情况下ScrollView只是为其他组件添加垂直滚动条,如果应用需要水平的滚动条,则可以借助于另一个组件:HorizontalScrollView来实现.Ho

Android自学笔记之 MultiAutoTextView的功能、特殊属性、用法(与AutoTextView的区别和近似)

一.MultiAutoCompleteTextView  介绍 1.功能:可支持选择多个值(在多次输入的情况下),分别用分隔符分开,,并且在每个值的选中的时候再次输入时会自动去匹配,可用在发短信.发邮件时选择联系人这种类型当中. 2.属性:android:completionThreshold= "2" 3.设置分隔符:mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 二.AutoCompleteTex

android学习---Gallery画廊视图

Gallery与Spinner有共同父类:AbsPinner,说明Gallery与Spinner都是一个列表框.它们之间的区别在于Spinner显示的是一个垂直的列表选择框,而Gallery显示的是一个水平的列表选择框.Spinner的作用是供用户选择,而Gallery则允许用户通过拖动查看上一个,下一个. Gallery用法与Spinner的用法形似,只要为它提供一个内容Adapter就可以了.Adapter的getView方法返回View作为Gallery列表的列表项.如果程序需要监控Gal

&lt;Android&gt;列表、网格、画廊视图及适配器的绑定

列表视图和适配器的绑定 列表视图既可以使用ListView组件,也可以继承ListActivity.显示可以是ArrayAdapter,也可以是游标SimpleCursorAdapter,还可以是继承BaseAdapter展示其它视图. Cursor c = getContentResolver().query(People.CONTENT_URI, null, null, null, null); //获得通讯录联系人游标对象Cursor startManagingCursor(c); //实

Gallery画廊视图

画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Gallery组件,通常使用标记在XML而布局文件中添加. 画廊视图在4.0后已经过期,但是我们仍然可以使用,不过后面我们将用水平的ListView自定义组件来实现这个效果,在自定义视图中讲解. 常用属性:1. android:animationDuration 用于设置列表项切换时的动画持续时间2. and

Android 自学之网格试图(GridView)和图片切换器(ImageSwitcher)功能和用法

网格试图(GridView)用于在界面上按行,列分布的方式来显示多个组件. GridView和ListView有共同的父类:AbsListView,因此GridView和ListView具有一定的相似性.GridView和ListView的主要区别在于:ListView只是一个方向上的分布:而GridView则会在两个方向上分布. 与ListView相似的是,GridView也需要通过Adapter来提供显示数据:可以通过SimpleAdapter来为GridView提供数据,也可以通过开发Ba

Android自学笔记之 Android五大布局之线性布局的功能、常用属性、用法

1.介绍: 线性布局管理器对存放其中的控件或布局采用线性方式管理 2.LinearLayout的常用属性 android:orientation = "vertical" -- 该属性决定它子类控件的排布方式(vertical:垂直:horizontal:水平) android:gravity = "center" -- 该属性决定它子类控件的xy的位置 常用属性值 center_vertical:垂直(Y轴)居中 center_horizontal:水平(X轴)居

【Android自学日记】关于Bitmap的理解和使用-不完整版

最近的Android自学刚好学习到异步线程的使用,对于开启异步线程加载网络图片中用到的Bitmap有点小蒙逼,这到底是个啥???所以我就自信的打开了百度!!以下就是我学习到的知识! 百度定义: 位图文件(Bitmap),扩展名可以是.bmp或者.dib.位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2.4.8.16.24和32位色彩.例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/(8*1024)

Android 自学之自动完成文本框 AutoCompleteTextView

自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上他也是一个编辑框,但他比普通的编辑框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择了某个菜单项过后,AutoCompleteTextView就会按用户选择自动填写该文本框. AutoCompleteTextView支持的常用的XML属性和相关方法及说明 XML属性 相关方法 说明 android:completionHint setCompletionHi