2011-03-29 109 views
1

我必须创建一个加载了来自驻留在SDCard上的特定文件夹中图像的gridview。该文件夹的路径是“/ sdcard/images /”。我试着用这个代码,应用程序 需要太多时间来加载,它只显示一个图像。如何从SD卡中的文件夹动态显示图像

public class ImAdapterh extends BaseAdapter{ 

     File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/"); 

int count=dir.list().length; 

String[] fileNames = dir.list(); 

private Context mContext; 

    public ImAdapterh(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return count; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = null;   


     for(String bitmapFileName : fileNames) 
     { 
      if (convertView == null) 
      { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8);     

       Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" + bitmapFileName); 
       System.out.println(dir); 
       imageView.setImageBitmap(bmp); 
      }else 
      { 
      imageView = (ImageView) convertView;    

      } 
    } 
     return imageView; 
     } 

应用程序被占用太多的时间,它是只显示一个图像

,这是我的活动类

 public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImAdapterh(this));} 

回答

1

该文件夹的路径是“/ SD卡/图片/”。

不,它不是,至少不适用于大多数设备。切勿在Android中硬编码路径。始终使用Environment.getExternalStorageDirectory()获取外部存储的根目录。

我试过这段代码,该应用程序需要花费太多时间来加载,它只显示一个图像。

当然。你在这里做的事情没有什么正确的。

最大的问题是,你的getView()负载图像到同一ImageView,对于每一个行你Adapter返回。推测,你应该只加载一个图像到ImageView对于给定的行。

你的下一个最大的问题是你在主应用程序线程上做磁盘I/O。

+0

@Kishore:我没有“样本代码”用于加载一个目录满图像,为'AdapterView'。然而,这里是我的一本书的免费摘录,其中介绍了如何将图像放入'ListView'行,这可能有所帮助:http://commonsware.com/Android/excerpt.pdf – CommonsWare 2011-03-31 12:07:35

+0

Ware有没有其他方法调用“getExternalStorageDirectory ()“,在应用程序中支持Api 1.5+ – Kishore 2011-05-25 09:38:29

+0

@Kishore:'getExternalStorageDirectory()'自从Android 1.0(API Level 1)以来就已经存在。 – CommonsWare 2011-05-25 10:38:17

0

从任何特定目录中获取图像。使用下面的代码

public void searchImageFromSpecificDirectory() { 

     String path = null; 

     String uri = MediaStore.Images.Media.DATA; 
     // if GetImageFromThisDirectory is the name of the directory from which image will be retrieved 
     String condition = uri + " like '%/GetImageFromThisDirectory/%'"; 
     String[] projection = { uri, MediaStore.Images.Media.DATE_ADDED, 
       MediaStore.Images.Media.SIZE }; 
     Vector additionalFiles = null; 
     try { 
      if (additionalFiles == null) { 
       additionalFiles = new Vector<String>(); 
      } 



      Cursor cursor = managedQuery(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, 
        condition, null, null); 
      if (cursor != null) { 

       boolean isDataPresent = cursor.moveToFirst(); 

       if (isDataPresent) { 

        do { 

         path = cursor.getString(cursor.getColumnIndex(uri)); 
System.out.println("...path..."+path); 
additionalFiles.add(path); 
      }while(cursor.moveToNext()); 
       } 
      if (cursor != null) { 
       cursor.close(); 
      } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
相关问题