2013-05-15 152 views
7

當我正在顯示保存在SD卡文件夾中的圖像時,我找到了以下鏈接。如何顯示保存在SD卡文件夾中的圖像在Android中

Displaying images in gridview from SDCard

我正在使用下面的代碼從SD卡中的指定文件夾中獲取圖像,但在這裏我得到0計數。

MyCode.jav

String[] projection = {MediaStore.Images.Media._ID}; 

    final String[] columns = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID }; 
    final String orderBy = MediaStore.Images.Media._ID; 
    Cursor imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      projection, 
      MediaStore.Images.Media.DATA + " like ? ", 
      new String[] {"/my_images"}, 
      null); 
    int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID); 
    this.count = imagecursor.getCount(); 
    this.thumbnails = new Bitmap[this.count]; 
    this.arrPath = new String[this.count]; 
    this.thumbnailsselection = new boolean[this.count]; 

    for (int i = 0; i < this.count; i++) { 
     imagecursor.moveToPosition(i); 
     int id = imagecursor.getInt(image_column_index); 
     int dataColumnIndex = imagecursor 
       .getColumnIndex(MediaStore.Images.Media.DATA); 
     thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
       getApplicationContext().getContentResolver(), id, 
       MediaStore.Images.Thumbnails.MICRO_KIND, null); 
     arrPath[i] = imagecursor.getString(dataColumnIndex); 
    } 
    imageAdapter = new ImageAdapter(); 
    secure_gallery_grid.setAdapter(imageAdapter); 
    imagecursor.close(); 

但在這裏按下面的鏈接保存在SD卡中的所有圖像顯示。 但這裏我想顯示保存在特定文件夾中的圖像,就像我在該文件夾中創建了「My_images」文件夾&保存的圖像。我想顯示該文件夾中的圖像&需要按照鏈接顯示在gridview中。

回答

26

可以從particualr文件夾獲取文件的路徑如下

一旦你的文件的路徑時,CA顯示在GridView中的圖像

ArrayList<String> f = new ArrayList<String>();// list of file paths 
File[] listFile; 

public void getFromSdcard() 
{ 
    File file= new File(android.os.Environment.getExternalStorageDirectory(),"TMyFolder"); 

     if (file.isDirectory()) 
     { 
      listFile = file.listFiles(); 


      for (int i = 0; i < listFile.length; i++) 
      { 

       f.add(listFile[i].getAbsolutePath()); 

      } 
     } 
} 

記住添加permissionin清單文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

通過具有寫權限默認具有讀權限。

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent"> 

<GridView 
    android:id="@+id/PhoneImageGrid" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="10dp" /> 

    </RelativeLayout> 

gelleryitem.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent"> 
<ImageView android:id="@+id/thumbImage" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_centerInParent="true" /> 
<CheckBox android:id="@+id/itemCheckBox" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" /> 
    </RelativeLayout> 

AndroidCustomGalleryActivity.java

public class AndroidCustomGalleryActivity extends Activity { 
private int count; 
private Bitmap[] thumbnails; 
private boolean[] thumbnailsselection; 
private String[] arrPath; 
private ImageAdapter imageAdapter; 
ArrayList<String> f = new ArrayList<String>();// list of file paths 
File[] listFile; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    getFromSdcard(); 
    GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
    imageAdapter = new ImageAdapter(); 
    imagegrid.setAdapter(imageAdapter); 


} 
public void getFromSdcard() 
{ 
    File file= new File(android.os.Environment.getExternalStorageDirectory(),"MapleBear"); 

     if (file.isDirectory()) 
     { 
      listFile = file.listFiles(); 


      for (int i = 0; i < listFile.length; i++) 
      { 

       f.add(listFile[i].getAbsolutePath()); 

      } 
     } 
} 

public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 

    public ImageAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return f.size(); 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(
        R.layout.galleryitem, null); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 

      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     Bitmap myBitmap = BitmapFactory.decodeFile(f.get(position)); 
     holder.imageview.setImageBitmap(myBitmap); 
     return convertView; 
    } 
} 
class ViewHolder { 
    ImageView imageview; 


} 
    } 

快照

enter image description here

+0

感謝您的代碼。但在這裏根據鏈接最終的String []列= {MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID}; \t \t final String orderBy = MediaStore.Images.Media._ID; \t \t光標imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns,null,null,orderBy);在這裏通過使用這行「MediaStore.Images.Media.EXTERNAL_CONTENT_URI」獲取保存在SD卡中的所有圖像。是否有任何修改此行以獲取保存在特定文件夾中的圖像的可能性。 – user2384424

+0

@ user2384424通常您會獲得文件夾中文件的路徑並顯示圖像。我上面發佈的代碼獲取sdcard中文件夾下所有文件的路徑。注意:該文件夾應該只包含圖像,否則你需要過濾文件路徑 – Raghunandan

+0

@ user2384424你可以檢查此鏈接以過濾.png文件。http://stackoverflow.com/questions/15853611/how-can-i-add -sdcard圖像到的CoverFlow/15853710#15853710。你可以使用一個或運算符來匹配.jpg也string模式=「.png | .jpg」。根據您的需要修改以上內容。 – Raghunandan

-1

這裏我張貼代碼來檢索「特定目錄」中的文件名。你需要做一些其他的任務你自己。

File imgDir = new File(Environment.getExternalStorageDirectory()+ File.separator + "directory"); 

if (!imgDir.exists()) 
    imgDir.mkdir(); 

String files[] = imgDir.list(); 

現在檢查「files []」是否爲空。

if (files == null) 
    // no files 
else{ 
    count = files.length; 
    //do something 
} 

你必須與他們的路徑文件列表,在電網從他們顯示出取位

注:

要打印完整路徑,使用下面的代碼。

imgDir.getAbsolutePath() + File.separator + files[i]); 
1

使用通用圖像裝載機

https://github.com/nostra13/Android-Universal-Image-Loader.git

給圖片網址作爲SD卡映像路徑。

/** 
    *adapter class for view pager 
    * 
    */ 
    private class ImagePagerAdapter extends PagerAdapter { 
     LayoutInflater inflater; 
     public ImagePagerAdapter() { 
      inflater=getActivity().getLayoutInflater(); 
     } 

     @Override 
     public int getCount() { 
      return viewPagerList.size(); 
     } 
     @Override 
     public void finishUpdate(View container) { 
     } 
     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view.equals(object); 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false); 
      ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image); 
      final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading); 
      String loadURL=null; 
      if(connectivityManager.hasDataConnectivity()){ 
       loadURL=viewPagerList.get(position).getModelImageUrl(); 
      } 
      else { 
       String fileName=viewPagerList.get(position).getModelImageUrl(); 
       fileName = fileName.replace(':', '/'); 
       fileName = fileName.replace('/', '_'); 
       loadURL="file://"+Environment.getExternalStorageDirectory()+"/"+folder+"/"+fileName; 
      } 
      BaseActivity.imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingStarted(String imageUri, View view) { 
        spinner.setVisibility(View.VISIBLE); 
       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
        String message = null; 
        switch (failReason) { 
        case IO_ERROR: 
         message = "Input/Output error"; 
         break; 
        case OUT_OF_MEMORY: 
         message = "Out Of Memory error"; 
         break; 
        case NETWORK_DENIED: 
         message = "Downloads are denied"; 
         break; 
        case UNSUPPORTED_URI_SCHEME: 
         message = "Unsupported URI scheme"; 
         break; 
        case UNKNOWN: 
         message = "Unknown error"; 
         break; 
        } 
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 

        spinner.setVisibility(View.GONE); 
       } 

       @Override 
       public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) { 
        spinner.setVisibility(View.GONE); 
        Logger.show(Log.INFO, "@@@@@@@", imageUri); 
        String uniqueUrlName = imageUri.replace(':', '/'); 
        uniqueUrlName = uniqueUrlName.replace('/', '_'); 

        File file = new File(Environment.getExternalStorageDirectory() 
          .toString() 
          + "/" 
          + folder 
          + "/" 
          + uniqueUrlName); 
        if(!file.exists()){ 
         new Thread(new Runnable() { 

          public void run() { 
           String imageUrlString="file://"+GetModels.getModelURL(imageUri,folder,loadedImage,context); 
           Logger.show(Log.INFO, context.getClass().getName(), "image loaded my folfer"+ imageUrlString); 
          } 
         }).start(); 
        } 
        Logger.show(Log.INFO, context.getClass().getName(), "image loaded loader "+ StorageUtils.getCacheDirectory(context)); 

       } 
      }); 

      imageView.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 

        Bundle b=new Bundle(); 
        b.putString("ProductName", viewPagerList.get(pos).getModelName()); 
        b.putString("ProductPrice", viewPagerList.get(pos).getModelPrice()); 
        b.putString("ProductUrl",viewPagerList.get(pos).getModelLink()); 
        String loadURL=null; 
        if(connectivityManager.hasDataConnectivity()){ 
         loadURL=viewPagerList.get(pos).getModelImageUrl(); 
        } 
        else { 
         String fileName=viewPagerList.get(pos).getModelImageUrl(); 
         fileName = fileName.replace(':', '/'); 
         fileName = fileName.replace('/', '_'); 
         loadURL="file://"+Environment.getExternalStorageDirectory()+"/" 
           +folder+"/"+fileName; 
        } 
        b.putString("ProductImage", loadURL); 
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager 
          .beginTransaction(); 
        fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,R.anim.slide_in_left, R.anim.slide_out_right); 
        ProductOverview commentFragment = new ProductOverview(); 
        commentFragment.setArguments(b); 
        fragmentTransaction.replace(R.id.product_container, commentFragment); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 

       } 
      }); 
      ((ViewPager) container).addView(imageLayout, 0); 
      return imageLayout; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((View) object); 
     } 
     @Override 
     public void restoreState(Parcelable state, ClassLoader loader) { 
     } 

     @Override 
     public Parcelable saveState() { 
      return null; 
     } 

     @Override 
     public void startUpdate(View container) { 
     } 
    } 
+0

你確定它會從SD卡加載圖像?你試過了嗎? –

+0

雅保證其工作正常 – OMAK

+0

你可以在這裏發佈一些代碼,以便我也可以使用它。因爲我只嘗試從互聯網上載圖像。我試圖從SD卡加載但失敗。它會幫助我,如果它工作正常。 –

1

無法使用mediastore方法顯示特定的文件夾圖像。因爲存儲在媒體存儲器中的每個圖像具有不同的唯一ID以標識它。

但您可以通過創建自己的方法來識別特定文件夾中的圖像,然後獲取創建縮略圖圖像。

+0

你有沒有任何例子,粗糙草圖的如何做到這一點,我想這樣做[鏈接](http://stackoverflow.com/questions/38324578/how-to-load-the-thumbnails-for-the-pictures-stored-in-特殊文件夾在exter),你能請幫忙! – Umair

相關問題