Android gallery+BaseAdapter实现简易的图片查看器

来源:互联网 发布:阿里云建ss 编辑:程序博客网 时间:2024/05/30 12:30

布局文件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"/>
1 0