標籤:android imageswitcher gallery
Gallery組件用於拖拽瀏覽圖片,下面我們就來看一下如何?。
一、實現Gallery
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:orientation="vertical" > <Gallery android:id="@+id/myGallery" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
2.自訂配接器類,可以直接覆寫BaseAdapter類中的幾個方法。
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) {//構造方法,用於擷取內容物件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]);//設定資源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); // 設定要使用的布局管理器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.運行執行個體如下:
二、Gallery和ImageSwitcher結合
這時的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); // 設定要使用的布局管理器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);// 取出mapMainActivity.this.imageSwitcher.setImageResource(map.get("img"));// 設定顯示圖片}});}private void initAdapter() {Field[] fields = R.drawable.class.getDeclaredFields();// Java反射機制擷取所有資源圖片for (int i = 0; i < fields.length; i++) {if (fields[i].getName().startsWith("ispic_")) {// 判斷開頭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 blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.list.add(map);}}simpleAdapter = new SimpleAdapter(this, this.list,R.layout.grid_layout, new String[] { "img" },new int[] { R.id.img });}}
4.運行執行個體:
Android實戰簡易教程-第十槍(畫廊組件Gallery實用研究)