`
微Smile
  • 浏览: 34874 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

画廊Gallery控件的使用

 
阅读更多

Gallery为一个画廊控件,只能显示一行,并支持左右滑动的效果。如下:


 

 

 

如上效果的实现包括了Gallery组件和ImageSwitcher组建的使用,完成的效果是点击图片则显示其大图片,程序说话:

package mobile.android.ch05.gallery;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;

public class Main extends Activity implements ViewFactory {
	private Gallery gallery;
	private ImageSwitcher imageSwitcher;
	private ImageAdapter imageAdapter;

	private int[] resIds = new int[] { R.drawable.item1, R.drawable.item2,
			R.drawable.item3, R.drawable.item4, R.drawable.item5,
			R.drawable.item6, R.drawable.item7, R.drawable.item8,
			R.drawable.item9, R.drawable.item10, R.drawable.item11,
			R.drawable.item12, R.drawable.item13, R.drawable.item14,
			R.drawable.item15 };

	//设置适配器类
	public class ImageAdapter extends BaseAdapter {
		int mGalleryItemBackground;
		private Context mContext;

		public ImageAdapter(Context context) {
			mContext = context;
			TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
			// 获取背景资源ID
			mGalleryItemBackground = typedArray.getResourceId(
					R.styleable.Gallery_android_galleryItemBackground, 0);
		}

		// 返回传入的图片ID数组的长度,也就是图片的总数。既然是数组,那么一定要注意越界问题。
		public int getCount() {
			return Integer.MAX_VALUE;
		}

		// 返回position所对应的图片对象
		public Object getItem(int position) {
			return position;
		}

		// 取得列表中与指定位置的行关联的ID.
		public long getItemId(int position) {
			return position;
		}

		/**
		 * 设置图像的显示风格图像资源
		 */
		public View getView(int position, View convertView, ViewGroup parent) {
			ImageView imageView = new ImageView(mContext);

			//设置imageView的源,并循环显示
			imageView.setImageResource(resIds[position % resIds.length]);
			// 设置图片的显示方式
			imageView.setScaleType(ImageView.ScaleType.FIT_XY);
			// 将图片缩小设置
			imageView.setLayoutParams(new Gallery.LayoutParams(136,88));
			//设置imageView的图像资源
			imageView.setBackgroundResource(mGalleryItemBackground);
			return imageView;
		}
	}

	

	// 返回一个视图,这个视图用来填充imageSwitcher,此为重写 的ViewFactory接口中的类,相当与getView().
	public View makeView() {
		ImageView imageView = new ImageView(this);
		// 设置背景色 
		imageView.setBackgroundColor(0xFF000000);  
		// 设置图片显示的缩放方式 
		 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
		// 设置显示的图片对相对容器的填充方式
		 imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
		return imageView;
	}
	
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		gallery = (Gallery) findViewById(R.id.gallery);
		imageAdapter = new ImageAdapter(this);
		gallery.setAdapter(imageAdapter);
		
//		 gallery.setUnselectedAlpha(0.5f);                   // 设置未选中图片的透明度   
//		 gallery.setSpacing(0);                         // 设置图片之间的间距  

		imageSwitcher = (ImageSwitcher) this.findViewById(R.id.imageswithcher);
	
		imageSwitcher.setFactory(this);

		//设置淡入淡出效果
		imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
				android.R.anim.fade_in));
		imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
				android.R.anim.fade_out));
		
//		//为ImageSwitcher组建设置其图片源,是当图片滑到屏幕正中,则视为自动选中,在滑动的过程中会触发
//		gallery.setOnItemSelectedListener(new OnItemSelectedListener() {
//
//			public void onItemSelected(AdapterView<?> arg0, View arg1,
//					int arg2, long arg3) {
//				imageSwitcher.setImageResource(resIds[arg2%resIds.length]);
//				
//			}
//
//			public void onNothingSelected(AdapterView<?> arg0) {
//				// TODO Auto-generated method stub
//				
//			}
//			
//		});
		
		//是需要用手点击才触发,滑动时不触发
		gallery.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				imageSwitcher.setImageResource(resIds[arg2 % resIds.length]);
				
			}
			
		});

	}
}

 

 

 

Gallery的使用主要包括如下几个步骤:


1 资源文件,复制进res/drawable文件夹中
2 定义Gallery 组件的背景样式文件
3 含有Gallery组件和ImageSwitcher组件的main.xml文件
4 BaseAdapter类,并实现其中的方法
5 Gllery组件绑定Adapter
6 Gallery组件的onItemSelected方法,为ImageSwitcher组件设置其图片源
7 ImageSwitcher中的ImageView控件

 

附录:

** TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);R.styleable.Gallery是res/values/attr.xml文件中一个属性资源ID.在<declare_styleable>标签中声明的style属性会在R.styleable类中自动生成静态变量名为<declare_styleable>和<attr>标签中name属性值的组合,中间用下划线链接

 

** 对于BaseAdapter类中getView()方法的解析:

 

  public abstract View getView (int position, View convertView, ViewGroup parent)  此为抽象方法,一般与ListView这个组件一起使用。

  三个参数的意义:POSITION就是LISTVIEW中的位置,如果你对LIST几个特殊位置的VIEW要改变,比如TITLE要改变,那么就是加判断
if(position == 0){
     //加入自己的view
     return view;
}
convertView是系统的,如果你在重写的时候没有绑定自己的VIEW就调用这个。

 

最后,关于Gallery的响应事件:

 

1、点击事件OnItemClickListener,是需要用手点击才触发,滑动时不触发

2、选中事件OnItemSelectedListener,是当图片滑到屏幕正中,则视为自动选中,在滑动的过程中会触发

适用场景:

1、点击事件OnItemClickListener,是在确定要选中该项时,才点击进行逻辑处理

2、选中事件OnItemSelectedListener,可以用来提醒用户,当前获取焦点的项,如果确认为该项则需要点击      OnItemClickListener后,进行下一步的逻辑处理。
 

  • 大小: 54.1 KB
分享到:
评论

相关推荐

    【Android 开发】:UI控件之 Gallery 画廊控件的使用

    Gallery控件一般是用于显示图像列表,因此也称为是画廊控件, Gallery只能水平显示一行,而且支持水平滑动效果。也就是说,单击、选中或者拖动Gallery中的图像, Gallery图像中的列表会根据不同的情况向左向右移动...

    031_android UI组件之 Gallery画廊控件

    首先,Gallery控件是继承自AdapterView的,这意味着它可以使用ArrayAdapter、CursorAdapter或BaseAdapter等适配器来填充数据。通过适配器,你可以将各种类型的数据(如字符串、图像等)绑定到Gallery中,实现动态...

    一个漂亮、动画很棒的画廊控件

    在Android开发中,创建一个美观且动画效果出色的画廊(Gallery)控件是提升用户体验的重要方式之一。"一个漂亮、动画很棒的画廊控件"这个项目,显然旨在提供这样的解决方案,它可能包含一系列定制化的代码和设计,...

    《Android开发视频教程》Gallery画廊控件.zip

    《Android开发视频教程》Gallery画廊控件.zip

    炫酷 自定义控件 3D绘制 画廊效果

    "炫酷自定义控件3D绘制画廊效果"是一个专为Android设计的独特控件,它提供了与传统Gallery控件不同的视觉体验。这个控件通过3D渲染技术,让图片展示呈现出立体动态的翻转效果,为用户带来更丰富的交互体验。 3D绘制...

    Android代码-画廊试图Gallery.rar

    Gallery控件通常与ImageView结合使用,展示一序列的图片。下面我们将深入探讨Gallery的关键知识点: 1. **布局文件配置**: 在XML布局文件中,你需要添加Gallery标签,并设置相应的属性,例如item间距`android:...

    安卓Gallery照片墙画廊图库相关-画廊试图Gallery.rar

    在Android开发中,"画廊试图Gallery"是一个常见的组件,用于展示图像集合,让用户能够浏览并选择图片。这个RAR文件包含的资源可能是一个示例项目,用于演示如何创建和使用自定义的Gallery视图。虽然无法一一验证每个...

    android安卓app开发之对新老2版画廊gallery的外观用法区别,附源代码.zip

    1. 在XML布局文件中添加Gallery控件: ```xml &lt;Gallery android:id="@+id/gallery" android:layout_width="match_parent" android:layout_height="wrap_content" /&gt; ``` 2. 创建适配器,继承自`BaseAdapter`,并...

    Android自定义控件(3D画廊)

    "3D画廊"是一种独特的自定义控件,它为用户展示图片提供了立体、动态的效果,类似于真实世界中的3D翻页效果。这篇博客文章 "Android自定义控件(3D画廊)" 提供了一个实现这种效果的教程,下面将详细讲解相关知识点...

    Android 之 Gallery画廊用法

    在Android开发中,`Gallery`组件是用于展示一系列图片或者视图的一种滚动控件,它允许用户通过左右滑动来浏览各个项目。`Gallery`在早期版本的Android API中被广泛使用,但在API 16之后已被弃用,取而代之的是更现代...

    android Gallery画廊实例

    在这个实例中,我们将会深入探讨如何利用Android SDK中的`Gallery`控件和`ImageSwitcher`控件来创建一个动态的画廊应用。 首先,`Gallery`是Android提供的一个视图类,继承自`AbsSpinner`,它设计用于展示一列水平...

    Android程序技术:画廊视图.pptx

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

    ImageCoverFlow-效果不错的画廊控件 可以设置画廊一次可见图片的张数.zip

    介绍:效果不错的画廊控件 可以设置画廊一次可见图片的张数,和其他第三方Gallery控件不同的是,该控件直接继承自View,而不是sdk中的Gallery控件。如果想获得包含demo的可运行代码,请在本站的下载链接中下载。项目...

    Gallery画廊使用

    《Gallery画廊使用详解》 在Android开发中,Gallery组件是一种经典的图片浏览控件,它允许用户通过左右滑动来浏览一系列的图片,通常用于创建相册或图像选择器等场景。然而,随着Android版本的发展,Gallery已经在...

    安卓Gallery照片墙画廊图库相关-Gallery搜狐视频画廊效果.rar

    在Android的早期版本中,系统自带了一个名为`Gallery`的视图控件,但自Android 3.0(API级别11)开始,这个控件已被弃用,开发者通常会使用其他方式来实现类似的功能。 要实现一个类似搜狐视频画廊的效果,你可以...

    安卓Gallery照片墙画廊图库相关-图片墙加强.zip

    这同时也意味着,这个项目可以作为学习和研究Android图片展示技术的一个资源,特别是对于那些想要了解如何定制和优化Gallery控件的人来说。 【标签】"Gallery照片墙画廊图库" 这个标签进一步明确了讨论的主题。在...

    安卓Gallery照片墙画廊图库相关-PhotoGallery.zip

    在Android系统中,Gallery组件是用于展示图片或视频的一个控件,它允许用户左右滑动浏览媒体内容。然而,随着Android版本的更新,原生的Gallery组件在API 16(Android 4.1 Jelly Bean)后已被弃用,开发者通常转向...

    安卓Gallery照片墙画廊图库相关-Android高级图片滚动控件3D版的图片轮播器Demo.rar

    "安卓Gallery照片墙画廊图库相关-Android高级图片滚动控件3D版的图片轮播器Demo" 提供了一个独特的解决方案,通过3D效果来提升用户的视觉体验。这个Demo旨在展示如何实现一个高级的图片滚动控件,它可能是基于开源库...

    Imageswitcher和Gallery实现同步

    在Android开发中,`ImageSwitcher` 和 `Gallery` 是两个非常重要的组件,它们主要用于展示图像,特别是用于创建滑动浏览图片的用户界面。`ImageSwitcher` 是一个视图切换器,通常用来显示两张图片之间的平滑过渡,而...

Global site tag (gtag.js) - Google Analytics