Aller au contenu

Tuto: simple gallerie photo


neoakira

Recommended Posts

Voici un exemple très simple pour avoir un aperçu de toutes les photos que vous prises avec l'appareil photos et qui sont enregistrées sur la carte sd.

voici le layout : main.xml

<?xml version="1.0" encoding="utf-8"?>
   android:id="@+id/gridview"
   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"
/>

voici le code : main.java

package com.neogb.imageupload;

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class main extends Activity {

   private File[] mlistFiles;

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

       mlistFiles = new File("/sdcard/dcim/camera").listFiles();

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

   }

   public class ImageAdapter extends BaseAdapter {
       private Context mContext;

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

       public int getCount() {
           return mlistFiles.length;
       }

       public Object getItem(int position) {
           return position;
       }

       public long getItemId(int position) {
           return position;
       }

       public View getView(int position, View convertView, ViewGroup parent) {
           ImageView imageView;
           if (convertView == null) {
               imageView = new ImageView(mContext);
               imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
               imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
               imageView.setPadding(8, 8, 8, 8);
           } else {
               imageView = (ImageView) convertView;
           }

           BitmapFactory.Options options=new BitmapFactory.Options();
           options.inSampleSize = 20;

           imageView.setImageBitmap(BitmapFactory.decodeFile(mlistFiles[position].getPath(), options));

           return imageView;
       }

   }

}

Voila, il vous reste plus qu'à implémenter les actions au click d'une image par exemple...

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Bonjour, je remonte ce topic parceque j'ai un problème qui me tracasse trop depuis quelque temps:

j'utilise

imgView.setImageURI(imageURI);

pour mettre l'URI d'une image dans une imageView.

Je voudrais ensuite la visualiser et la mettre dans une gallery.

Le problème est que celà marche pour certaines images seulement !! :o ... Je comprend pas pourquoi :/ !? De plus certaines grandes images marchent et certaines petites images ne fonctionnent pas :o !!

Lorsque je visualise une image qui ne marche pas, rien ne s'affiche ... et un carré gris va dans la gallery -_- ... Pour une image qui marche .. bah tout est nickel ^^

Mais le truc bizzare c'est que lorsque je met les images qui ne marchent pas en tant que ressource du projet avec ca:

imgView.setImageResource(R.drawable.mon_image_qui_marche_pas);

eh bien là, CA MAARCHE :o !!

Pouvez vous m'expliquer d'où vient le problème :| je vous en serais très reconnaissant :) MERCI !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci pour le tuto sympa.

J'ai un peu modifié ton code, car j'ai plus de 300 images dans mon téléphone et c'est un peu long.

Dans l'image adapter je charge une image par defaut de petite taille.

ensuite une fois l'ensemble des ImageView ajoutés au GridView je crée un nouveau thread afin de charger les images une par une sans plomber l'UI.

j'utilise un Handler qui se charge de mettre à jour les vignettes.

Cela marche bien sur les vignettes visibles. une fois cette vignettes chargée si je scrolle je vois que l'image par défaut est toujours affichées. Et si je remonte aux images en haut qui étaient bonnes elles ont disparues au profit de l'image apr défaut.

Je n'avoue pas bien comprendre ce qu'il se passe. Dans les logs a priori je ne vois pas d'erreur et toutes mes images sont bien chargée.

Lien vers le commentaire
Partager sur d’autres sites

Par rapport au problème que j'ai soulevé plus haut, j'ai essayé le code donné par neoakira et il ya toujours le même soucis.

Certaines images s'affiche et pas d'autres ... le problème c'est que les photos prises par la caméra font parti des images qui ne s'affichent pas -_- ...

Lien vers le commentaire
Partager sur d’autres sites

  • 3 years later...

Salut tous le monde

Dsl mais j'ai recopié tous le tuto, je n'ai pas d'erreur dans mon code, mais rien ne s'affiche.

Je test grâce à un Log la grandeur de mlistFiles, il m'indique que c 0.

Serai-se possible que le chemin d’accès "/sdcard/dcim/camera"  ne soit pas le bon???

Quelqu'un peux m'aider????

merci :-)

 

 

 

Oups :-)

DSl

Je sais pk lol

j'avais mal écris le chemin d’accès hihihi

Modifié par Ermal
Lien vers le commentaire
Partager sur d’autres sites

Le "tuto" t'a induit en erreur, il ne faut jamais mettre en dur dans ton code le chemin d'accès à la carte externe (ce chemin n'est pas forcément le même sur tous les smartphones). Il existe une méthode à appeler pour récupérer ce chemin, et ça rend ton application portable et indépendante de ton smartphone

Par ex.:

File extDir = Environment.getExternalStorageDirectory();
mListFiles = new File(extDir, "dcim").listFiles();
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...