2013-08-29 52 views
0

爲了拍攝一些照片並獲取這些照片的多個路徑,我按照以下教程: AndroidCustomGalleryActivity爲AndroidCustomGallery設置自己的位置

它工作正常,但我只是想知道我怎麼可以設置自己的位置,才能在我想要的文件夾,選擇多張照片..

這是示例代碼:

import sogeti.cir.fsn.R; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class AndroidCustomGalleryActivity extends Activity { 

    private int count; 
    private Bitmap[] thumbnails; 
    private boolean[] thumbnailsselection; 
    private String[] arrPath; 
    private ImageAdapter imageAdapter; 

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

     final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; 
     final String orderBy = MediaStore.Images.Media._ID; 
     Cursor imagecursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       columns, null, null, orderBy); 

     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); 
     } 
     GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
     imageAdapter = new ImageAdapter(); 
     imagegrid.setAdapter(imageAdapter); 
     imagecursor.close(); 

     final Button selectBtn = (Button) findViewById(R.id.selectBtn); 
     selectBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       final int len = thumbnailsselection.length; 
       int cnt = 0; 
       String selectImages = ""; 
       for (int i =0; i<len; i++) 
       { 
        if (thumbnailsselection[i]){ 
         cnt++; 
         selectImages = selectImages + arrPath[i] + "|"; 
        } 
       } 
       if (cnt == 0){ 
        Toast.makeText(getApplicationContext(), 
          "Please select at least one image", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "You've selected Total " + cnt + " image(s).", 
          Toast.LENGTH_LONG).show(); 
        Log.d("SelectedImages", selectImages); 
       } 
      } 
     }); 
    } 

    public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

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

     public int getCount() { 
      return count; 
     } 

     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.multipicker_gallery_item, null); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } 
      else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 
        if (thumbnailsselection[id]){ 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 
      holder.imageview.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        int id = v.getId(); 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*"); 
        startActivity(intent); 
       } 
      }); 
      holder.imageview.setImageBitmap(thumbnails[position]); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
    } 
    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 
} 

感謝幫助!

回答

0

我固定它使用一個有用的帖子,這裏是新樣本活動,您可以指定文件夾位置,以填補畫廊:

public class AndroidCustomGalleryActivity extends Activity { 
    private int count; 
    private boolean[] thumbnailsselection; 
    private ImageAdapter imageAdapter; 
    ArrayList<String> listFileStr = new ArrayList<String>(); 
    File[] listFile; 

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

     getFromSdcard(); 
     GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
     imageAdapter = new ImageAdapter(); 
     imagegrid.setAdapter(imageAdapter); 

     this.count = listFileStr.size(); 
     this.thumbnailsselection = new boolean[this.count]; 

     final Button selectBtn = (Button) findViewById(R.id.selectBtn); 
     selectBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       final int len = thumbnailsselection.length; 
       int cnt = 0; 
       String selectImages = ""; 
       for (int i = 0; i < len; i++) { 
        if (thumbnailsselection[i]) { 
         cnt++; 
         selectImages = selectImages + listFileStr.get(i); 
        } 
       } 
       if (cnt == 0) { 
        Toast.makeText(getApplicationContext(), 
          "Please select at least one image", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "You've selected Total " + cnt + " image(s).", 
          Toast.LENGTH_LONG).show(); 
        Log.d("SelectedImages", selectImages); 
       } 
      } 
     }); 
    } 

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

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

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

       listFileStr.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 listFileStr.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.multipicker_gallery_item, null); 
       holder.imageview = (ImageView) convertView 
         .findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView 
         .findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 
        if (thumbnailsselection[id]) { 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 
      Bitmap myBitmap = BitmapFactory.decodeFile(listFileStr.get(position)); 
      holder.imageview.setImageBitmap(myBitmap); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
    } 

    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 
} 

希望它能幫助。