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

时间:2021-03-12 22:41:07
实现一个在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