【Android开发】经典范例1-在GridView中显示SD卡上的全部图片

实现一个在GridView中显示SD卡上的全部图片的实例。

在mian.xml布局文件中加入GridView组件,列数4,也就是每行显示4张图片
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/linearLayout1"
    android:orientation="vertical"
    >
    <GridView android:id="@+id/gridView1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginTop="10px"
        android:horizontalSpacing="3px"
        android:verticalSpacing="3px"
        android:numColumns="4"/>
</LinearLayout>

为了有获取SD图片的效果,事先在Android虚拟机的SD目录下放置一些图片,放置过程和效果如图

【Android开发】经典范例1-在GridView中显示SD卡上的全部图片


MainAtivity:
package com.example.test;  
  
import java.io.File;
import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
  
public class MainActivity extends Activity {  
	private List<String> imagePath=new ArrayList<String>();//图片文件的路径
	private static String[] imageFormatSet=new String[]{"jpg","png","gif"};//合法的图片文件格式
	/*
	 * 方法:判断是否为图片文件
	 * 参数:String path图片路径
	 * 返回:boolean 是否是图片文件,是true,否false
	 * */
	private static boolean isImageFile(String path){
		for(String format:imageFormatSet){//遍历数组
			if(path.contains(format)){//判断是否为合法的图片文件
				return true;
			}
		}
		return false;
	} 
	/*
	 * 方法:用于遍历指定路径
	 * 参数:String url遍历路径
	 * 无返回值
	 * */
	private void getFiles(String url){
		File files=new File(url);//创建文件对象
		File[] file=files.listFiles();
		try {
			for(File f:file){//通过for循环遍历获取到的文件数组
				if(f.isDirectory()){//如果是目录,也就是文件夹
					getFiles(f.getAbsolutePath());//递归调用
				}else{
					if(isImageFile(f.getPath())){//如果是图片文件
						imagePath.add(f.getPath());//将文件的路径添加到List集合中
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();//输出异常信息
		}
	}
	
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        
        String sdpath=Environment.getExternalStorageDirectory()+"/";//获得SD卡的路径
        getFiles(sdpath);//调用getFiles()方法获取SD卡上的全部图片
        if(imagePath.size()<1){//如果不存在文件图片
        	return;
        }
        
        /*首先获取GrivView组件,然后创建BaseAdapter类的对象,并重写其中的
         * getView()、getItemId()、getItem()和getConut()方法,其中最主要的是重写
         * getView()方法来设置要显示的图片,最后将BaseAdapter适配器与GridView关联*/
        GridView gridview=(GridView)findViewById(R.id.gridView1);//获取GridView组件
        BaseAdapter adapter=new BaseAdapter(){


        	@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				ImageView iv;//声明ImageView的对象
				if(convertView==null){
					iv=new ImageView(MainActivity.this);//实例化ImageView的对象
					/**************设置图像的宽度和高度**************/
					iv.setAdjustViewBounds(true);
					iv.setMaxWidth(150);
					iv.setMaxHeight(113);
					/****************************/
					iv.setPadding(5, 5, 5, 5);//设置ImageView的内边距
				}else{
					iv=(ImageView)convertView;
				}
				//为ImageView设置要显示的图片
				Bitmap bm=BitmapFactory.decodeFile(imagePath.get(position));
				iv.setImageBitmap(bm);
				return iv;
			}
        	
        	//获得数量
			@Override
			public int getCount() {
				return imagePath.size();
			}


			//获得当前选项
			@Override
			public Object getItem(int position) {
				return position;
			}


			//获得当前选项的id
			@Override
			public long getItemId(int position) {
				return position;
			}
        };
        
        gridview.setAdapter(adapter);//将适配器与GridView关联
	}


}  

运行效果如图

【Android开发】经典范例1-在GridView中显示SD卡上的全部图片

转载请注明出处:http://blog.csdn.net/acmman/article/details/45849697

上一篇:C语言实现函数重载


下一篇:MySQL自动化备份脚本_升级版