Android ImageSwitcher和Gallery:图片切换器和图库

Android ImageSwitcher和Gallery:图片切换器和图库,第1张

概述在使用Android手机设置壁纸的时候,会看到屏幕底部有很多可以滚动的图片,当单击某一图片时,在其上面的空间会显示当前选中的图片,此时我们用到的就是Gallery(图库)和ImageSwitcher(图片切换器)。Gallery组件用于横向显示图像列表,并且自动将当前图像放置到中间位置。ImageSwitcher

在使用 Android 手机设置壁纸的时候,会看到屏幕底部有很多可以滚动的图片,当单击某一图片时,在其上面的空间会显示当前选中的图片,此时我们用到的就是 gallery(图库)和 ImageSwitcher(图片切换器)。

gallery 组件用于横向显示图像列表,并且自动将当前图像放置到中间位置。

ImageSwitcher 则像是图片浏览器,可以切换图片,通过它可以制作简单的幻灯片等。通常将这两个类结合在一起使用,可以制作有一定效果的相册。

下面通过一个实例来了解一下这两个组件的使用方法。

在工程 WidgetDemo 的布局文件 main.xml 中添加一个名为 galleryDemo 的 button,用以启动 galleryActivity。在 main.xml 中添加代码如下:

 
<buttonandroID:ID="@+ID/button11"androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content"androID:text="galleryDemo"/>


单击 button 并启动 galleryActivity 的代码如下:

 
button gallerybtn = (button)this.findVIEwByID(R.ID.button11);gallerybtn.setonClickListener(new VIEw.OnClickListener(){@OverrIDepublic voID onClick(VIEw v){Intent intent;intent = new Intent(MainActivity.this, galleryActivity.class);startActivity(intent);}});

同时在 AndroIDManifest.xml 文件中声明该 Activity:

<activity androID:name=".galleryActivity"/>

galleryActivity 的运行效果如图 1 所示。


图 1  galleryActivity 的运行效果


galleryActivity 使用的布局文件为 gallery.xml,内容如下:

 
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:orIEntation="vertical"> <ImageSwitcherandroID:ID="@+ID/switcher"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:layout_alignParentleft="true"androID:layout_alignParenttop="true" /> <galleryandroID:ID="@+ID/gallery"androID:layout_wIDth="fill_parent"androID:layout_height="60dp"androID:layout_alignParentBottom="true"androID:layout_alignParentleft="true"androID:background="#333333"androID:gravity="center_vertical"androID:spacing="16dp" /> </relativeLayout>

该布局文件使用的是相对布局。
1)通过 androID:layout_alignParenttop="true" 属性将 ImageSwitcher 放置于视图的顶端,其顶部与其父组件的顶部对齐。
2)通过 androID: layout_alignParentleft="true" 属性使 ImageSwitcher 的左边缘与其父组件的左边缘对齐。

在设置 gallery 组件时,将其与屏幕的左下角对其,androID:layout_alignParentBottom="true" 是将该组件的底部与其父组件的底部对齐,并且使用 androID:spacing="16dp" 属性设置图片之间的间距。

galleryActivity.java 的代码如下:

 
package introduction.androID.Widgetdemo; import androID.app.Activity;import androID.content.Context;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.OnItemSelectedListener;import androID.Widget.BaseAdapter;import androID.Widget.gallery;import androID.Widget.ImageSwitcher;import androID.Widget.ImageVIEw;import androID.Widget.VIEwSwitcher.VIEwFactory; public class galleryActivity extends Activity {private gallery gallery;private ImageSwitcher imageSwitcher;private int[] resIDs = new int[]{R.drawable.img_1, R.drawable.bbb,R.drawable.img_2, R.drawable.img_5,R.drawable.img_3, R.drawable.img_6,R.drawable.img_4, R.drawable.img_7}; @OverrIDepublic voID onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentVIEw(R.layout.gallery);/* 加载gallery和ImageSwitcher */gallery = (gallery) findVIEwByID(R.ID.gallery); imageSwitcher = (ImageSwitcher) findVIEwByID(R.ID.switcher);/*创建用于描述图像数据的ImageAdapter对象*/ImageAdapter imageAdapter = new ImageAdapter(this);/*设置gallery组件的Adapter对象*/gallery.setAdapter(imageAdapter);/*添加gallery监听器*/gallery.setonItemSelectedListener(new OnItemSelectedListener() {@OverrIDepublic voID onItemSelected(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) {// Todo auto-generated method stub//当选取Grallery上的图片时,在ImageSwitcher组件中显示该图像imageSwitcher.setimageResource(resIDs[position]);} @OverrIDepublic voID onnothingSelected(AdapterVIEw<?> argO) {// Todo auto-generated method stub}}); /* 设置ImageSwitcher组件的工厂对象*/imageSwitcher.setFactory(new VIEwFactory() {/* ImageSwitcher用这个方法来创建一个VIEw对象去显示图片*/@OverrIDepublic VIEw makeVIEw() {// Todo auto-generated method stubImageVIEw imageVIEw = new ImageVIEw(galleryActivity.this);/* setScaleType 可以设置当图片大小和容器大小不匹配时的剪辑模式*/imageVIEw.setScaleType(ImageVIEw.ScaleType.FIT_CENTER);imageVIEw.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));return imageVIEw;} }); /* 设置ImageSwitcher组件显示图像的动画效果 */imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, androID.R.anim.fade_in));imageSwitcher.setoutAnimation(AnimationUtils.loadAnimation(this, androID.R.anim.fade_out)); } public class ImageAdapter extends BaseAdapter {/* 定义Context */private Context mContext; /*声明ImageAdapter */public ImageAdapter(Context context) {mContext = context;} @OverrIDe/*获取图片的个数*/public int getCount() {// Todo auto-generated method stubreturn resIDs.length;} /*获取图片在库中的位置 */@OverrIDepublic Object getItem(int position) {// Todo auto-generated method stubreturn position;} /*获取图片ID */@OverrIDepublic long getItemID(int position) {// Todo auto-generated method stubreturn position;} /* 返回具体位置的ImageVIEw对象 */@OverrIDepublic VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {ImageVIEw imagevIEw = new ImageVIEw(mContext);/*给ImageVIEw设置资源*/imagevIEw.setimageResource(resIDs[position]);/*设置图片布局大小为100*100 */imagevIEw.setLayoutParams(new gallery.LayoutParams(100, 100));/* 设置显示比例类型*/imagevIEw.setScaleType(ImageVIEw.ScaleType.FIT_XY);return imagevIEw;}}}

gallery 要显示的图片来自资源文件。把需要显示的图片放在 /res/drawable 目录下后,将这些图片的 ID 保存在一个 int 数组中以备使用。相关代码如下:

 
private int[] resIDs = new int[]{R.drawable.img_1, R.drawable.bbb,R.drawable.img_2, R.drawable.img_5,R.drawable.img_3, R.drawable.img_6,R.drawable.img_4, R.drawable.img_7};

gallery 通过 setAdapter(imageAdapter)方法将组件和要显示的图片关联起来。

本实例中为 gallery 设定的适配器为 ImageAdapter,主要用于描述图像信息,其为 androID.Widget.BaseAdapter 的子类。

在 ImageAdapter 类中有两个方法值得我们注意:
1)getCount() 方法:用于返回图片的总数,通常使用获取存放图片数组长度的方法获取图片总数,也可以规定具体的返回数,但不能超过实际图片数量。
2)getVIEw() 方法:是当 gallery 需要显示某一个图像时,将当前图片的索引,也就是 position 的值传入,从 resIDs 数组中获得相应的图片的 ID。

galleryActivity 为添加 gallery 监听器,处理了用户单击 gallery 中图片的事件,并设置了 ImageSwitcher 相关属性。其代码如下:

 
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, androID.R.anim.fade_in));imageSwitcher.setoutAnimation(AnimationUtils.loadAnimation(this, androID.R.anim.fade_out));

设置了 ImageSwitcher 组件图片切换时的渐入和渐出效果。

总结

以上是内存溢出为你收集整理的Android ImageSwitcher和Gallery:图片切换器和图库全部内容,希望文章能够帮你解决Android ImageSwitcher和Gallery:图片切换器和图库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1119708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存