Jump to content

Tuto: simple gallerie photo


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

Link to comment
Share on other 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 !

Link to comment
Share on other 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.

Link to comment
Share on other 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 -_- ...

Link to comment
Share on other 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

Edited by Ermal
Link to comment
Share on other 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();
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...