【问题标题】:sdcard,images,folder,pathSD卡,图像,文件夹,路径
【发布时间】:2011-08-06 12:13:56
【问题描述】:

我想在 sdcard 中显示特定文件夹中的图像
字符串路径 = 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);` 

【问题讨论】:

    标签: image path directory sd-card


    【解决方案1】:

    我知道这个问题已经很老了,我也已经搜索了好几个星期了,经过剪切和粘贴以及大量的反复试验,我终于想出了对我有用的代码。

    代码可能不是最干净的,并且可能有更好的方法(我找不到...),但至少它有效。

    画廊活动

    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;
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多