Android GridView显示SD卡的图片

GridView的XML布局:

main.xml:

<GridViewxmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:columnWidth="90dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/> 

imageitem.xml:

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="wrap_content"
         android:paddingBottom="4dip"android:layout_width="fill_parent">
         <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/textid"/>
         <ImageView
              android:layout_height="wrap_content"
              android:id="@+id/ItemImage"
               android:layout_width="wrap_content"
              android:layout_centerHorizontal="true">
         </ImageView>
</RelativeLayout>  

Activity:

 public class FileimageActivity extends Activity {
       private static final String TAG = "Fileimage";
       private List<HashMap<String, String>> list;
       private ContentResolver cr;
       private List<ImageView> imageViews = null;
       HashMap<String,Object> hashMap;
       public Bitmap bitmap;
       public Bitmap newBit;
     public void onCreate(Bundle savedInstanceState)
   {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        findimagepath();
     }
     public void findimagepath()
      GridViewgridView=(GridView)findViewById(R.id.gridview);
      list=newArrayList<HashMap<String,String>>();
      cr=getContentResolver();
      String[]imagedata={Thumbnails._ID,Thumbnails.IMAGE_ID,Thumbnails.DATA};//找到image
      Cursorcursor=cr.query(Thumbnails.EXTERNAL_CONTENT_URI, imagedata, null,
                    null,null);                                                                                                         //利用游标找image
      String[] from = { "image_id", "path" };
      int[] to = { R.id.textid, R.id.ItemImage };                                                               //在imageView.xml的布局中
      getColumnData(cursor);
      ListAdapteradapter = new picview(this, list, R.layout.imageitem,
                            from,to);
      gridView.setAdapter(adapter);
    }

//找到image的path,再放进list里。

  private void getColumnData(Cursor cur)

 {
     if(cur.moveToFirst())
     {
           int_id;
           intimage_id;
           Stringimage_path;
           int_idColumn = cur.getColumnIndex(Thumbnails._ID);
           intimage_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID);
           intdataColumn = cur.getColumnIndex(Thumbnails.DATA);
           Log.i(TAG, String.valueOf(_idColumn)) ;
           do{
                            //Get the field values
                            _id= cur.getInt(_idColumn);
                            image_id= cur.getInt(image_idColumn);
                            image_path= cur.getString(dataColumn);

                            //Do something with the values.
                            //Log.i(TAG, _id + " image_id:" + image_id + " path:"
                            //+ image_path + "---");
                            HashMap<String,String> hash = new HashMap<String, String>();
                            hash.put("image_id",image_id + "");
                            hash.put("path",image_path);
                            list.add(hash);

                     }
                     while(cur.moveToNext());

              }

       }

          //很多时候GridView 是利用BaseAdapter来显示图片更多,BaseAdapter的图片资源多少来自drawable的资源。不过其实用SimpleAdapter就已经可以,

        //重点是SimpleAdapter中有setViewImage这个方法。

        class picview extends SimpleAdapter{
         public picview(Context context, List<? extends Map<String, ?>> data,
                            intresource, String[] from, int[] to) {
                     super(context,data, resource, from, to);
             }
              /*
               * Called by bindView() to set theimage for an ImageView but only if there is no existing ViewBinder or i
               * f the existing ViewBinder cannothandle binding to an ImageView.
               *  By default, the value will betreated as an image resource.
               *  If the value cannot be used asan image resource, the value is used as an image Uri.
               *   This method is called insteadof setViewImage(ImageView, int)
               * if the supplied data is not an int orInteger.
               * @ value为image的地址 即为path
               * Parameters
               * v  ImageView to receive an image
           value  the value retrieved from the data set

               */
              public void setViewImage(ImageView v, String value)
              {
                     try
                     {
                            FileInputStreamfis = new FileInputStream(value);
                            BufferedInputStreambis = new BufferedInputStream(fis);
                            bitmap= BitmapFactory.decodeStream(bis);
                            newBit= Bitmap.createScaledBitmap(bitmap, 180, 180, false);
                            v.setImageBitmap(newBit);

                            bis.close();
                            fis.close();
                     }
                       catch (Exceptione)
                     {
                            Log.e(TAG,e.toString());
                            v.setImageURI(Uri.parse(value));
                     }
              }
       }

}
时间: 2024-11-08 20:03:22

Android GridView显示SD卡的图片的相关文章

Android手机外置SD卡(TF卡)的获取方法

Android手机上的外置SD卡,起初的时候,即在Android出世的前几年,那时手机的存储是十分有限的,不像现在到处可见16G.32G和64G的存储,因而那时候的手机有的厂商允许插入外置的SD卡,此时这张卡仍处于手机的扩展部分.后来,随着手机的发展以及存储能力的增加,这张外置SD卡,逐渐成为了手机的一部分,不再允许可挺拔了,当然现在依然有的手机允许对存储进行拓展,比如三星等. 那张拓展的存储卡,现在叫做TF卡,且不是所有的手机都支持它,但是有时候有些奇葩需求偏要优先存储在TF卡里面,这叫不得不

Android中向SD卡读写数据,读SD卡和手机内存

package com.example.sdoperation; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import android.support.v7.app.Actio

给android模拟器添加SD卡

如何给android模拟器创建SD卡呢 我们在命令行中输入 mksdcard 512M D:\Program Files (x86)\Android\sdcard.img 这样就在我们的D:\Program Files (x86)\Android目录中有了个sdcard.img 大小为512M Sd卡创建完毕,下一步就是在eclipse中设置下,让模拟器启动的时候加载这个SD卡 点击 window-preferences 然后在 android->launch中的 default emulato

Android 虚拟机安装SD卡

在cmd命令行下,进入platform-tools目录下. 1.创建sdcard mksdcard -l mycard 256M E:\android\myCards\mysdcard.img 这样就在该目录下创建好了一个SD卡的虚拟镜像.其中-l命令行参数表示虚拟磁盘的卷标号. 256M是创建的虚拟sdcard的大小,在9M-1023M之间 2.激活sdcard 命令行输入:emulator -avd Android4.0 -sdcard G:\android\myCards\mysdcard

Android模拟器使用SD卡

在Android的应用开发中经常要用到与SD卡有关的调试,本文就是介绍关于在Android模拟器中SD卡的使用 一.      准备工作 在介绍之前首先做好准备工作,即配好android的应用开发环境 l  JDK 1.6+ l  Android SDK 1.6 (这个版本无关紧要,后面在升级) l  Android SDK Setup l  Eclipse IDE for Java Developers 详细配置方法请参考:http://blog.sina.com.cn/s/blog_4de0

Android_(控件)使用ListView显示Android系统中SD卡的文件列表_02

使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局item_filelayout(一个文件的单独存放) 运行截图: 程序结构 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="

android 如何在sd卡下创建指定的多层文件夹

我们在很多情况下都需要在sd卡目录下创建子目录存放图片文件之类的,之前也有人问我怎么在sd卡下创建子文件夹,今天就讲一个例子,就是当程序发生异常的时候,怎么把异常写在指定的文件中,当然在这里只讲如何创建文件夹, 代码 public class MainActivity extends Activity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle

Android获取外置SD卡存储路径的方法

在开发应用的过程中,经常会遇到需要获取设备存储路径的问题.而从网上看到的很多方法获取到的都是内置存储位置,并非外置SD卡路径,因此我推荐使用反射的机制来获取外置存储的路径. 通常,使用Environment.getExternalStorageDirectory()获取的都是内置存储的路径:其他方法如下(由于不同的设备厂商可能进行修改,因此不同设备可能有所不同,以下提供几个方法仅供参考): [由于以下的这些方法一般不可见,因此需要通过反射机制调用] 说明: 1.路径都可以获取到,若存在外置存储卡

android关于获取SD卡手机内存的容量

/** * 获取SD的信息的方法 */ private void getSd() { // TODO Auto-generated method stub File path=Environment.getExternalStorageDirectory(); StatFs stat=new StatFs(path.getPath()); long blockSize=stat.getBlockSize(); long totalBlacks=stat.getBlockCount(); long