SDCard, изображения, папки, путь - PullRequest
2 голосов
/ 15 апреля 2011

Я хочу отображать изображения из определенной папки в SDCard
String path = Environment.getExternalStorageDirectory (). ToString () + "/ pictures";

Какие изменения необходимо внести в приведенный ниже запрос, чтобы получить изображения из папки с картинками.

`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);` 

1 Ответ

0 голосов
/ 27 декабря 2012

Я знаю, что этот вопрос довольно старый, я тоже искал его уже несколько недель, и я наконец-то придумал код, который работает для меня после вырезания и вставки и с большим количеством проб и ошибок.

Код может быть не самым чистым, и могут быть более эффективные способы (я не смог его найти ...), но, по крайней мере, он работает.

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>
...