android学习笔记(33)画廊视图(Gallery)的功能和用法

文章标签: android,android-gallery
2015-1-4 13:06:55     人阅读    

Gallery与Spinner两个组件有共同的父类:AbsSpinner,表明Gallery和Spinner都是- 个列表框。它们之间的区别在于Spimier显示的是一个垂直的列表选择框,而Gallery显示的 是一个水平的列表选择框。Gallery与Spinner还有一个区别:Spinner的作用是供用户选择, 而Gallery则允许用户通过拖动来査看上一个、下一个列表项。
Gallery额外提供了如表2.20所示的XML属性。
表2.20 Gallery常用的XML属性及相关方法
XML厲性                                                           相关方法                                                 说 明
android :animationDuration                    setAnimationDuration(int)               设置列表项切换时的动画持续时间
android:gravity                                      setGravity(int)                                 设置对齐方式
android:spacing                                     setSpacing(int)                                设置Gallery内列衣项之间的间距
android: unselectedAlpha                       setUnsclcctedAlpha(float)                 设置没有选中的列表项的透明度


Gallery本身的用法非常简单——基本上与Spimiei•的用法形似,只要为它提供一个内容 Adapter即可,该Adapter的getView方法所返回的View将作为Gallery列表的列表项;如果 程序需要监控到Gallery选择项的改变,可以通过为Gallery添加OnltemSelectedListener监听器即可实现。
下面通过一个实例来介绍Gallery的用法。
实例:“幻灯片”式图片浏览器
本实例和前一个实例非常相似,二者都是带预览的图片浏览器,但本实例的界面更加友 好,因为本例釆用Gallery作为图片预览器,Gallery会生成一个“水平列表”,每个列表项就 是一张图片预览,而且Gallery生成的“水平列表”可以让用户拖动来切换列表项。
下面是本应用的界面布局文件。
程序清单:GallaryTest\res\layout\main.xml

<?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">
<!-- 定义一个ImageSwitcher组件 -->
<ImageSwitcher android:id="@+id/switcher"
 android:layout_width="320dp"
 android:layout_height="320dp"
 />
<!-- 定义一个Gallery组件 -->
<Gallery android:id="@+id/gallery"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_marginTop="25dp" 
 android:unselectedAlpha="0.6"
 android:spacing="3pt"
 /> 
</LinearLayout>

上面的界面布局十分简单,仅仅是定义了两个组件:ImageSwitcher和Gallery组件。接 下来主程序也很简单:为ImageSwitcher传入一个ViewFactory对象,为Gallery传入一个 Adapter对象。这样ImageSwitcher和Gallery即可正常工作。
为了让ImageSwitcher可以显示Gallery中选中的图片,为Gallery绑定 OnltemSelectedListener 监听器即可。
程序代码如下。
程序清单:GallaryTest\src\org\crazyit\gallery\GalleryTest.java

package org.crazyit.gallery;

import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Gallery.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
public class GallaryTest extends Activity
{
 int[] imageIds = new int[]
 {
  R.drawable.shuangzi, R.drawable.shuangyu,
  R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,
  R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,
  R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,
  R.drawable.mojie };

 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final Gallery gallery = (Gallery) findViewById(R.id.gallery);
  // 获取显示图片的ImageSwitcher对象
  final ImageSwitcher switcher = (ImageSwitcher) 
   findViewById(R.id.switcher);
  // 为ImageSwitcher对象设置ViewFactory对象
  switcher.setFactory(new ViewFactory()
  {
   @Override
   public View makeView()
   {
    ImageView imageView = new ImageView(GallaryTest.this);
    imageView.setBackgroundColor(0xff0000);
    imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
    imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    return imageView;
   }
  });
  // 设置图片更换的动画效果
  switcher.setInAnimation(AnimationUtils.loadAnimation(this,
   android.R.anim.fade_in));
  switcher.setOutAnimation(AnimationUtils.loadAnimation(this,
   android.R.anim.fade_out));
  // 创建一个BaseAdapter对象,该对象负责提供Gallery所显示的图片
  BaseAdapter adapter = new BaseAdapter()
  {
   @Override
   public int getCount()
   {
    return imageIds.length;
   }
   @Override
   public Object getItem(int position)
   {
    return position;
   }
   @Override
   public long getItemId(int position)
   {
    return position;
   }

   // 该方法的返回的View就是代表了每个列表项
   @Override
   public View getView(int position, View convertView, ViewGroup parent)
   {
    // 创建一个ImageView
    ImageView imageView = new ImageView(GallaryTest.this);
    imageView
     .setImageResource(imageIds[position % imageIds.length]);
    // 设置ImageView的缩放类型
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setLayoutParams(new Gallery.LayoutParams(75, 100));
    TypedArray typedArray = obtainStyledAttributes(
     R.styleable.Gallery);
    imageView.setBackgroundResource(typedArray.getResourceId(
     R.styleable.Gallery_android_galleryItemBackground, 0));
    return imageView;
   }
  };
  gallery.setAdapter(adapter);
  gallery.setOnItemSelectedListener(new OnItemSelectedListener()
  {
   // 当Gallery选中项发生改变时触发该方法
   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
    int position, long id)
   {
    switcher.setImageResource(imageIds[position % imageIds.length]);
   }

   @Override
   public void onNothingSelected(AdapterView<?> parent)
   {
   }
  });
 }
}


上面的程序中粗体字代码创建了一个BaseAdapter对象,该 Adaptei•将负责为Gallery提供列表项。


原文地址:http://www.itmmd.com/201501/435.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(34)使用AlertDialog创建简单对话框   上一篇
下一篇  android navidgation drawer 在导航抽屉中如何改变List选中项的颜色?
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!