【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

发布了150 篇原创文章 · 获赞 43 · 访问量 17万+
展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

Gridview如何显示本地存储路径的图片

06-12

如下是我现在GridView加载图片和文字的方式,如果图片不在资源里面,存在手机本地路径,要怎么改才能加载图片。 自己试了试发现把map.put("img", img[i]);改成map.put("img", Uri.parse("file://" + file));就可以,直接把文件路径放进去。虽然我也不知道这样做的原理是什么,有人解惑么。 ``` public class MainActivity extends AppCompatActivity { private GridView grid_test; private List<Map<String,Object>> dataList; private SimpleAdapter simpleAdapter; private int[] img = {R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round, R.mipmap.ic_launcher, R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round,R.mipmap.ic_launcher, R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round,R.mipmap.ic_launcher, R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round,R.mipmap.ic_launcher, R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round,R.mipmap.ic_launcher, R.mipmap.ic_launcher_round,R.mipmap.ic_launcher,R.mipmap.ic_launcher_round,R.mipmap.ic_launcher}; private String[] imgName = {"1","2","3","4", "5","6","7","8", "9","10","11","12", "13","14","15","16", "17","18","19","20", "21","22","23","24"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); grid_test = (GridView) findViewById(R.id.grid_test); dataList = new ArrayList<Map<String, Object>>(); simpleAdapter = new SimpleAdapter(this,getData(),R.layout.grid_item, new String[] {"img","txt"},new int[]{R.id.img_item,R.id.txt_item}); grid_test.setAdapter(simpleAdapter); } private List<Map<String,Object>> getData() { for (int i=0; i<img.length; i++) { Map<String,Object> map = new HashMap<String, Object>(); map.put("img", img[i]); map.put("txt", imgName[i]); dataList.add(map); } return dataList; } } ``` 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览