鍍金池/ 教程/ Android/ Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第十槍(畫廊組件 Gallery 實(shí)用研究)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第九槍(BitmapFactory.Options 對(duì)資源圖片進(jìn)行縮放)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第三槍(實(shí)現(xiàn)簡(jiǎn)單繪圖組件)
Android 用的最多的,也最難用的應(yīng)該就是 ListView 了,下面我們研究一下它的用法。
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第四槍(ScrollView 和 HorizontalScrollView 動(dòng)態(tài)添加控件并提供事件
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第一槍(Spinner 控件詳解)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第六槍(各種對(duì)話框 Dialog 用法研究大全)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第七槍(Activity 的啟動(dòng)模式)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第二槍(Spinner 下拉級(jí)聯(lián)效果)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第八槍(ImageSwitcher 用法實(shí)例)
Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第十槍(畫廊組件 Gallery 實(shí)用研究)
作者簡(jiǎn)介

Android 實(shí)戰(zhàn)簡(jiǎn)易教程-第十槍(畫廊組件 Gallery 實(shí)用研究)

Gallery 組件用于拖拽瀏覽圖片,下面我們就來(lái)看一下如何實(shí)現(xiàn)。

一、實(shí)現(xiàn) Gallery

1.布局文件很簡(jiǎn)單:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <Gallery
        android:id="@+id/myGallery"
        android:gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" ></Gallery>

</LinearLayout>

2.自定義適配器類,可以直接覆寫 BaseAdapter 類中的幾個(gè)方法。

package org.yayun.demo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Gallery.LayoutParams;

public class ImageGalleryAdapter extends BaseAdapter {
    private Context context;
    private int imgRes[] = new int[] { R.drawable.ispic_a, R.drawable.ispic_b,
            R.drawable.ispic_c, R.drawable.ispic_d, R.drawable.ispic_e, };

    public ImageGalleryAdapter(Context c) {//構(gòu)造方法,用于獲取上下文對(duì)象
        this.context = c;
    }

    public int getCount() {

        return imgRes.length;
    }

    public Object getItem(int position) {
        return imgRes[position];
    }

    public long getItemId(int position) {
        return imgRes[position];
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView img = new ImageView(this.context);
        img.setBackgroundColor(0xFFFFFFFF);
        img.setImageResource(this.imgRes[position]);//設(shè)置資源
        img.setScaleType(ImageView.ScaleType.CENTER);//居中顯示
        img.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        return img;
    }

}

3.MainActivity.java:

package org.yayun.demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery;

public class MainActivity extends Activity {
    private Gallery gallery;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // 生命周期方法
        super.setContentView(R.layout.main); // 設(shè)置要使用的布局管理器
        gallery = (Gallery) findViewById(R.id.myGallery);
        gallery.setAdapter(new ImageGalleryAdapter(this));
        gallery.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(MainActivity.this,
                        "您選擇了第" + String.valueOf(position + 1) + "張圖片",
                        Toast.LENGTH_SHORT).show();

            }
        });
    }
}

4.運(yùn)行實(shí)例如下:

http://wiki.jikexueyuan.com/project/android-in-action/images/31.png" alt="" />

二、Gallery 和 ImageSwitcher 結(jié)合

這時(shí)的 Gallery 我們用 SimpleAdapter 類完成。

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:gravity="bottom"
    android:orientation="vertical" >

    <ImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ImageSwitcher>

    <Gallery
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:spacing="5dp" />

</LinearLayout>

2.定義顯示模板:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center" />

</LinearLayout>

3.MainActivity.java 程序:

package org.yayun.demo;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery.LayoutParams;
import android.widget.Gallery;
import android.widget.ViewSwitcher.ViewFactory;

public class MainActivity extends Activity {
    private Gallery gallery;
    private List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
    private SimpleAdapter simpleAdapter;
    private ImageSwitcher imageSwitcher;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // 生命周期方法
        super.setContentView(R.layout.main); // 設(shè)置要使用的布局管理器
        initAdapter();
        gallery = (Gallery) findViewById(R.id.gallery);
        imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);
        imageSwitcher.setFactory(new ViewFactory() {

            public View makeView() {
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setBackgroundColor(0xFFFFFFFF);
                imageView.setScaleType(ImageView.ScaleType.CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                return imageView;
            }
        });
        gallery.setAdapter(simpleAdapter);
        gallery.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Map<String, Integer> map = (Map<String, Integer>) MainActivity.this.simpleAdapter
                        .getItem(position);// 取出map
                MainActivity.this.imageSwitcher.setImageResource(map.get("img"));// 設(shè)置顯示圖片

            }
        });
    }

    private void initAdapter() {
        Field[] fields = R.drawable.class.getDeclaredFields();// Java反射機(jī)制獲取所有資源圖片
        for (int i = 0; i < fields.length; i++) {
            if (fields[i].getName().startsWith("ispic_")) {// 判斷開(kāi)頭
                Map<String, Integer> map = new HashMap<String, Integer>();
                try {
                    map.put("img", fields[i].getInt(R.drawable.class));
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                this.list.add(map);
            }
        }
        simpleAdapter = new SimpleAdapter(this, this.list,
                R.layout.grid_layout, new String[] { "img" },
                new int[] { R.id.img });

    }
}

4.運(yùn)行實(shí)例:

http://wiki.jikexueyuan.com/project/android-in-action/images/32.png" alt="" />