【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目录下放置一些图片,放置过程和效果如图



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关联
	}


}  

运行效果如图


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

相关文章
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
12天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
15天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
19 1
Android开发之使用OpenGL实现翻书动画
|
15天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
12 1
Android开发之OpenGL的画笔工具GL10
|
17天前
|
Android开发
Android保存图片到相册(适配android 10以下及以上)
Android保存图片到相册(适配android 10以下及以上)
20 1
|
21天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
12 0
|
21天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
Android开发 数据格式 XML
Android异步加载图片详解之方式二(3)
main.xml如下:   listviewitem.xml如下:   ...
795 0
|
缓存 Java Android开发
Android异步加载图片详解之方式二(2)
FileCache.java如下: package com.cn.loadImages; import java.io.File; import java.
879 0
|
Android开发
Android异步加载图片详解之方式二(1)
MainActivity.java如下: package com.cn.perfectlistview; import java.util.ArrayList; import android.
879 0