2011-11-30 4 views
0

L'exigence suivante est là pour mon application mobile:Personnaliser Android Gallery

  1. La valeur par défaut Android Gallery est affichée qui contient la liste d'albums photo.
  2. Si l'utilisateur sélectionne un album particulier, toutes les images cochées s'affichent.

J'ai déjà développé un code source qui récupère toutes les images de la galerie (carte SD) & affiche toutes les images avec une case à cocher.

J'ai besoin d'astuces/suggestions pour implémenter la condition ci-dessus où la case à cocher sur les images devrait être affichée seulement après que l'utilisateur ait choisi un album particulier.

Répondre

1

J'ai mis en place la vue de la grille avec la case à cocher, Il suffit de regarder dans ce code, il donne une idée à ce sujet. JavaClass:

public class GridWithCheckBoxesActivity extends Activity { 
    private int count; 
    private Bitmap[] thumbnails; 
    private boolean[] thumbnailsselection; 
    private String[] arrPath; 
    private ImageAdapter imageAdapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     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, 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) { 
       // TODO Auto-generated method stub 
       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.galleryitem, 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; 
    } 
} 

galleritem.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:button="@drawable/checkbox" android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> 
</RelativeLayout> 

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"> 
    <Button android:id="@+id/selectBtn" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:text="Select" android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:minWidth="200px" /> 
    <GridView android:id="@+id/PhoneImageGrid" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:numColumns="auto_fit" android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" android:columnWidth="90dp" 
     android:stretchMode="columnWidth" android:gravity="center" 
     android:layout_above="@id/selectBtn" /> 
</RelativeLayout> 
+0

Merci. J'ai déjà implémenté le code où je récupère la liste des images de la Galerie Android et ajoute une case à cocher à chacune des images. Actuellement, le scénario est un peu différent lorsque je dois d'abord afficher la liste des albums sur la Galerie Android et lorsque l'utilisateur clique sur un album spécifique, alors j'ai besoin de montrer toutes les images de l'album avec une case à cocher. – chiranjib