1. 程式人生 > >遍歷指定目錄下的圖片檔案 顯示在gridview

遍歷指定目錄下的圖片檔案 顯示在gridview

gridview佈局

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android"   
    android:id="@+id/gridview" 
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    /> 


item配件佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    android:orientation="vertical"   
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:layout_marginTop="5dp" 
    > 
    <ImageView   
        android:id="@+id/image" 
        android:layout_width="100dp" 
        android:layout_height="150dp"   
        android:layout_gravity="center" 
        android:scaleType="fitXY" 
        android:padding="4dp" 
       /> 
    <TextView   
        android:id="@+id/title" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"   
        android:layout_gravity="center" 
        android:gravity="center_horizontal" 
        /> 
</LinearLayout> 


主Activity

package com.su.testgrid3;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class TestGrid3Activity extends Activity {
	private GridView gridView;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		String[] titles = FileUtil.getImageNames("/mnt/sdcard/k/");
		String[] imagePaths = new String[titles.length];
		for (int i = 0; i < titles.length; i++) {
			imagePaths[i]="/mnt/sdcard/k/"+titles[i];
		}
		
		gridView = (GridView) findViewById(R.id.gridview);
		PictureAdapter adapter = new PictureAdapter(titles, imagePaths, this);
		gridView.setAdapter(adapter);

		gridView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				Toast.makeText(TestGrid3Activity.this, "你點選了" + (position + 1),
						Toast.LENGTH_SHORT).show();
			}
		});
		
		gridView.setOnItemLongClickListener(new OnItemLongClickListener(){
			public boolean onItemLongClick(AdapterView<?> parent, View v,
					int position, long id) {
				Toast.makeText(TestGrid3Activity.this, "你長按了" + (position + 1),
						Toast.LENGTH_SHORT).show();
				return true;
				/*
				 * 這裡需要true
				 * 因為:OnItemLongClick事件中:down事件返回值標記此次事
				 * 件是否為點選事件(返回false,是點選事件;返回true,不記為點選事件),
				 * 而up事件標記此次事件結束時間,也就是判斷是否為長按。
				 */
				
			}
			
		});
	}
}
介面卡
// 2012-4-18下午07:46:57

package com.su.testgrid3;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

//自定義介面卡
class PictureAdapter extends BaseAdapter {
	private LayoutInflater inflater;
	private List<Picture> pictures;

	public PictureAdapter(String[] titles, String[] images, Context context) {
		super();
		pictures = new ArrayList<Picture>();
		inflater = LayoutInflater.from(context);
		for (int i = 0; i < images.length; i++) {
			Picture picture = new Picture(titles[i], images[i]);
			pictures.add(picture);
		}
	}

	@Override
	public int getCount() {
		if (null != pictures) {
			return pictures.size();
		} else {
			return 0;
		}
	}

	@Override
	public Object getItem(int position) {
		return pictures.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.picture_item, null);
			viewHolder = new ViewHolder();
			viewHolder.title = (TextView) convertView.findViewById(R.id.title);
			viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		viewHolder.title.setText(pictures.get(position).getTitle());
		viewHolder.image.setImageBitmap(BitmapFactory.decodeFile(pictures.get(
				position).getImageId()));
		return convertView;
	}

}

class ViewHolder {
	public TextView title;
	public ImageView image;
}

picture的javabean

// 2012-4-18下午07:47:44

package com.su.testgrid3;

class Picture {
	private String title;
	private String imageId;

	public Picture() {
		super();
	}

	public Picture(String title, String imageId) {
		super();
		this.title = title;
		this.imageId = imageId;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getImageId() {
		return imageId;
	}

	public void setImageId(String imageId) {
		this.imageId = imageId;
	}
}

獲取圖片檔案的名字陣列的操作類

// 2012-4-18下午07:49:44
 
package com.su.testgrid3;

import java.io.File;

public class FileUtil {
	public static String[] getImageNames(String folderPath) {
		File file01 = new File(folderPath);

		String[] files01 = file01.list();

		int imageFileNums = 0;
		for (int i = 0; i < files01.length; i++) {
			File file02 = new File(folderPath + "/" + files01[i]);

			if (!file02.isDirectory()) {

				if (isImageFile(file02.getName())) {

					imageFileNums++;
				}
			}
		}

		String[] files02 = new String[imageFileNums];

		int j = 0;
		for (int i = 0; i < files01.length; i++) {
			File file02 = new File(folderPath + "/" + files01[i]);

			if (!file02.isDirectory()) {

				if (isImageFile(file02.getName())) {
					files02[j] = file02.getName();
					j++;
				}
			}
		}
		return files02;
	}

	private static boolean isImageFile(String fileName) {
		String fileEnd = fileName.substring(fileName.lastIndexOf(".") + 1,
				fileName.length());
		if (fileEnd.equalsIgnoreCase("jpg")) {
			return true;
		} else if (fileEnd.equalsIgnoreCase("png")) {
			return true;
		} else if (fileEnd.equalsIgnoreCase("bmp")) {
			return true;
		} else {
			return false;
		}
	}

}