2011-04-15 40 views
2

我想顯示SD卡中特定文件夾的圖像
String path = Environment.getExternalStorageDirectory()。toString()+「/ pictures」;sdcard,images,folder,path

對以下查詢從圖片文件夾中獲取圖像應進行哪些更改。

`String[] img = { MediaStore.Images.Thumbnails._ID }; 
     imagecursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, img,null,null, MediaStore.Images.Thumbnails.IMAGE_ID + ""); 
     image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);` 

回答

0

我知道這個問題是比較舊的,我也搜索過這個好幾個星期了,我終於想出了被剪切和粘貼後,用大量的試驗和錯誤的工作對我來說代碼。

代碼可能不是最乾淨的,並且可能有更好的方法來做(我找不到它......),但至少它可以工作。

GalleryActivity

package com.gallery.sdcard; 

import java.io.File; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class GalleryActivity extends Activity { 

     String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath(); //SDCard Path 
     String targetPath = ExternalStorageDirectoryPath + "/myGallery/pictures/"; 

     File targetDirector = new File(targetPath); 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gallery); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     myImageAdapter = new ImageAdapter(this); 
     gridview.setAdapter(myImageAdapter); 

     Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show(); 

     File[] files = targetDirector.listFiles(); 

     for (File file : files){ 
      myImageAdapter.add(file.getAbsolutePath()); 
     } 

     gridview.setOnItemClickListener(myOnItemClickListener); 
    } 

    OnItemClickListener myOnItemClickListener = new OnItemClickListener(){ 


      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      String fname = (String)parent.getItemAtPosition(position); 
      Toast.makeText(getApplicationContext(), fname, Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse("file://" + fname), "image/*"); 
      startActivity(intent); 

     }}; 

    public class ImageAdapter extends BaseAdapter { 

    private final Context mContext; 
    ArrayList<String> itemList = new ArrayList<String>(); 

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

    void add(String path){ 
     itemList.add(path); 
    } 


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


     public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return itemList.get(position); 
     } 


     public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
      if (convertView == null) { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       imageView.setLayoutParams(new GridView.LayoutParams(220, 220)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

      Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220); 

      imageView.setImageBitmap(bm); 
      return imageView; 
     } 

     public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { 

     Bitmap bm = null; 
     // First decode with inJustDecodeBounds=true to check dimensions 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(path, options); 

     // Calculate inSampleSize 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

     // Decode bitmap with inSampleSize set 
     options.inJustDecodeBounds = false; 
     bm = BitmapFactory.decodeFile(path, options); 

     return bm; 
     } 

     public int calculateInSampleSize(

     BitmapFactory.Options options, int reqWidth, int reqHeight) { 
     // Raw height and width of image 
     final int height = options.outHeight; 
     final int width = options.outWidth; 
     int inSampleSize = 1; 

     if (height > reqHeight || width > reqWidth) { 
     if (width > height) { 
     inSampleSize = Math.round((float)height/(float)reqHeight);  
     } else { 
     inSampleSize = Math.round((float)width/(float)reqWidth);  
     } 
     } 

     return inSampleSize;  
     } 
    } 

    ImageAdapter myImageAdapter; 

} 

gallery.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

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

</LinearLayout>