布局文件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"
>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
MainActivity类
package com.sun.activity;
import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Gallery;
import android.widget.SpinnerAdapter;
public class MainActivity extends Activity {
//用于保存sdcard中的图片路径
ArrayList<String> fileList=new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//用于获得sdcard目录
File file= Environment.getExternalStorageDirectory();
/*
注释的部分是真机图片目录获得方式 “/DCIM/Camera/”这是我手机图片存放的位置
String path= Environment.getExternalStorageDirectory()+"/DCIM/Camera/";
File file=new File(path); */
//用户获得sdcard目录下的文件
File[]files= file.listFiles();
for (int i = 0; i < files.length; i++) {
//判断文件路径是不是图片,是图片保存到集合中
if(getImageFile(files[i].getPath()))
{
fileList.add(files[i].getPath());
}
}
//获得画廊
Gallery gallery=(Gallery) findViewById(R.id.gallery);
//给画廊绑定适配器
gallery.setAdapter(new ImageAdapter(this, fileList));
}
//判断文件路径是不是图片
public boolean getImageFile(String path)
{
//查找文件路径中点第一次出现位置,用于做字符串截取
int start=path.indexOf(".");
//如果start=-1代表没找到详细说明请参考javaAPI帮助文档
if(start!=-1)
{
String str=path.substring(start+1, path.length());
Log.v("aaaaaaaaa",str);
//判断是不是图片路径
if(str.equals("jpg"))
{
return true;
}else{
return false;
}
}else{
return false;
}
}
}
自定义ImageAdapter适配器
package com.sun.activity;
import java.util.List;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter{
private Context mContext;
private List<String>list;
//构造方法
public ImageAdapter(Context context,List<String> imageList ){
mContext=context;
list=imageList;
}
@Override
public int getCount() {//获得要显示的图片数量就是集合的长度
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {//取得没个资源的位置
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {//取得每个项的ID
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView=new ImageView(mContext);
//BitmapFactory.decodeFile其实就是个封装的IO流
Bitmap bm=BitmapFactory.decodeFile(list.get(position));
//把读取到的图片设置给imageview
imageView.setImageBitmap(bm);
//重新设置图片的缩放模式
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//重新设置layout的宽和高
imageView.setLayoutParams(new Gallery.LayoutParams(200, 200));
return imageView;
}
}
运行效果
如果在真机上运行您只需要在AndroidManifest.xml文件中加入SDcard读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>