Android中读取SD卡中的图片,并显示到ListView

导读:本篇文章讲解 Android中读取SD卡中的图片,并显示到ListView,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

  ListView这是在Android中用得比较多的组件了,所以就把比较常用的一种读取SD卡的图片并显示在其上面,进行了一点点整理(比较简单的整理)!!!!记得打开读取SD卡的权限。。。。。。。。。。。。切记

1:读取SD卡中,所有的图片文件

	 /**  
     * 初始化  
     */  
    public void initData(){  
        /**图片对象集合*/  
        ArrayList<HashMap<String,Object>> picList = new ArrayList(); 
        //查询SD卡所有图片,得到游标  
        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);  
        while(cursor.moveToNext()){  
            //得到图片的名字  
            String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));  
            //得到图片的描述信息  
            String info = cursor.getString(cursor.getColumnIndex(Media.DESCRIPTION));  
            //图片数据  
            byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));  
            HashMap map = new HashMap();  
            map.put("name", name==null ? "":name);  
            map.put("info", info==null ? "":info);  
            map.put("data", data);  
            picList.add(map);  
        }  
        cursor.close();  
    }  
//设置适配器
		BaseAdapter ba = new BaseAdapter() {
			
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				if(convertView==null){  
                    convertView = getLayoutInflater().inflate(R.layout.listview_item, null);  
                }  
                ImageView image = (ImageView) convertView.findViewById(R.id.iv_picture);  
                TextView nameText = (TextView) convertView.findViewById(R.id.tv_name);   
                  
                String name = picList.get(position).get("name").toString();   //拿到图片的名字
                byte[] bs = (byte[]) picList.get(position).get("data");  
                //设置图片信息  
                nameText.setText(name);  
                //设置图片  
                Bitmap bitmap = BitmapFactory.decodeFile(new String(bs,0,bs.length-1));  
                image.setImageBitmap(bitmap);  
                //设置标识符  
                image.setTag(position);  
                list.add(name);  
                  
                //为图片添加监听  
                image.setOnClickListener(new OnClickListener() {                      
                    @Override  
                    public void onClick(View v) {  
                         Toast.makeText(MainActivity.this, "点击了我!!", 0).show(); 
                        
                    }  
                });  
                return convertView;  
			}
			
			@Override
			public long getItemId(int arg0) {
				
				return arg0;
			}
			
			@Override
			public Object getItem(int arg0) {
				
				return arg0;
			}
			
			@Override
			public int getCount() {
				
				return picList.size();
			}
		};
		//ListView设置显示适配器
		lvlist.setAdapter(ba);

第三种:读取SD中某个文件中的所有图片(未知图片的名字形式)

/*
	 * 就单纯加载某个文件下的图片
	 */
	private List<Map<String,Object>> getDatas() {  
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
        String sdpath = "";  
        sdpath = Environment.getExternalStorageDirectory().toString();  
        sdpath = sdpath;        //这里可以设置你要读取文件的路径,我这就是写了SD卡的路径
        File file = new File(sdpath);  
        if (!file.exists()) {    //文件不存在           
            return null;  
        } 
        else{
        	//获取以png为后缀的图片
			File[] files = file.listFiles(new FilenameFilter() { // 找到匹配的图片
						public boolean accept(File dir, String filename) {
							return filename.endsWith(".png");
						}
					});    
			//将图片装载到List中,方便ListView进行显示
			for (int i = 0; i <files.length; i++) {
				Map<String, Object> map = new HashMap<String, Object>();
				String imagePath = "/sdcard/"+files[i].getName();
				map.put("icon", BitmapFactory.decodeFile(imagePath));
				map.put("name", "第 " + i);
				list.add(map);
			}
			return list;  
        }
    }  

这后面适配器的设置步骤就和下面的设置的一样就不多介绍了,

第二种:读取SD中某个文件中的图片(已知图片名字的格式,这里是形如aaa1.png格式)

/*
	 * 就单纯加载某个文件下的图片
	 */
	private List<Map<String,Object>> getDatas() {  
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
        for (int i=0; i<=15; i++) {  
            Map<String,Object> map = new HashMap<String,Object>();  
            String imagePath = "/sdcard/aaa"+i+".png";  
            map.put("icon", BitmapFactory.decodeFile(imagePath));  
            map.put("name", "第 "+i);   
            list.add(map);  
        }
        return list;  
    }  

  这一种的缺点就是你已经知道你图片的命名形式,否则就需要用到正则表达式进行匹配也可以的。

final List<Map<String,Object>> listPicture = getDatas();
		BaseAdapter pi = new BaseAdapter() {		
			@Override
			public View getView(int arg0, View convertView, ViewGroup arg2) {
				if(convertView==null){  
                    convertView = getLayoutInflater().inflate(R.layout.listview_item, null);  
                }  
                ImageView image = (ImageView) convertView.findViewById(R.id.iv_picture);  
                TextView nameText = (TextView) convertView.findViewById(R.id.tv_name);   
                 image.setImageBitmap((Bitmap) listPicture.get(arg0).get("icon")); 
				 nameText.setText((String)(listPicture.get(arg0).get("name")));
                 return convertView;
			}
			
			@Override
			public long getItemId(int arg0) {
				
				return arg0;
			}
			
			@Override
			public Object getItem(int arg0) {
			
				return arg0;
			}
			
			@Override
			public int getCount() {
				
				return listPicture.size();
			}
		};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/12454.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!