Publié le 24/02/2015
Auteur Axel
Réseaux sociaux
0 partages
0 tweets
2 plus
0 commentaires

Selectionner puis afficher une image

Un appareil mobile sert avant tout à partager des données avec ses amis ou avec les réseaux sociaux. Dans cet article, nous allons voir comment afficher une boite de dialogue pour sélectionner une image puis de connaitre la photo qu'à choisit l'utilisateur. Ensuite, ces données pourront être envoyé via sms ou un autre support de communication.

Choisir une photo dans l'album

1160-pickup-picturePour illustrer la sélection d'une image et surtout comment connaitre la photo qu'à choisit l'utilisateur, nous allons utiliser le layout suivant composé de:
Bouton: appeler la boite de dialogue 'sélectionnez une image',
TextView: afficher le chemin et le nom du fichier ainsi que les dimensions de l'image,
ImageView: visualiser la photo.

Définition du Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	android:id="@+id/widget32"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical"
	xmlns:android="http://schemas.android.com/apk/res/android">
    <Button
	android:id="@+id/btGallery"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Dialogue Image"/>
    <TextView
	android:id="@+id/tvStatus"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
        android:background="#FAFAFA"/>    
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/> 
</LinearLayout>

Sélectionner une image dans la galerie

Pour lancer la boite de dialogue, j'ai choisi d'appeler l'objet Intent puis de fixer le filtre sur le type image. La particularité est que lorsque l'utilisateur a choisit une photo, son choix n'est pas directement connu. En fait, un événement est généré que l'on récupére dans une fonction globale onActivityResult. D'ou l'intéret de fixer une constante sur le type image pour pouvoir détecter la fin de la sélection.

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
 
/**
 * Sélectionner une photo dans la gallerie
 * http://www.fobec.com/java/1161/selectionner-puis-afficher-une-image.html
 * @author Axel fevrier 2015
 */
public class MainActivity extends Activity {
    //constante pour définir l'id du type image
 
    final static int SELECT_PICTURE = 1;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Lier l'evenement btGalleryClick au boutton
        ((Button) findViewById(R.id.btGallery)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                btGalleryClick(v);
            }
        });
    }
 
    /**
     * Evenement du click boutton
     * @param v 
     */
    public void btGalleryClick(View v) {
        //Création puis ouverture de la boite de dialogue
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, ""), SELECT_PICTURE);
    }
 
    /**
     * Retour de la boite de dialogue
     * @param requestCode
     * @param resultCode
     * @param data 
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ImageView mImageView = (ImageView) findViewById(R.id.imageView1);
        TextView textView = (TextView) findViewById(R.id.tvStatus);
 
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case SELECT_PICTURE:
                    String path = getRealPathFromURI(data.getData());
                    Log.d("Choose Picture", path);
                    //Transformer la photo en Bitmap
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
                    //Afficher le Bitmap
                    mImageView.setImageBitmap(bitmap);
                    //Renseigner les informations status
                    textView.setText("");
                    textView.append("Fichier: " + path);
                    textView.append(System.getProperty("line.separator"));
                    textView.append("Taille: " + bitmap.getWidth() + "px X " + bitmap.getHeight() + " px");
                    break;
            }
        }
    }
 
    /**
     * Obtenir le chemin vers une ressource
     * la fonction a été trouvé sur Stackoverflow
     * @param contentURI
     * @return 
     */
    private String getRealPathFromURI(Uri contentURI) {
        String result;
        Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
        if (cursor == null) { 
            result = contentURI.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }
}

Dans l'exemple l'image choisie est affichée dans un ImageView pour que l'on ait quelque chose de visuel. En fait, le plus souvent la photo est utilisée dans le cadre d'une action comme l'envoi via un SMS ou le partage sur les réseaux sociaux. Le principe reste de même, l'utilisateur sélectionne une photo sur son appareil mobile, on récupère le lien absolu vers la ressource puis l'image est envoyée.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - android
Mise a jour
24/02/2015
Visualisation
vu 2111 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Christof dans CMS

Je pense qu'il y a un problème au niveau de l'affectation du longint "Color" dans la
variable de type byte "r". A mon avis, cela risque de provoquer une erreur de
vérifi...

Publié par PizzaToy dans php5

Salut,
super Class mais elle a fait son temps. Il faut maintenant passer la version 1.1 de l'API Twitter search et son authentification !

Publié par ali dans logiciel

it is very good i am very happy becose for hand cap helpn tha is a good work

Publié par fobec dans java

La boucle de lecture est corrigée et prend en compte l'état pause. Sympa d'avoir signaler l'erreur

Publié par fredouille dans java

Il ne faut pas oublier de mettre aussi System.setErr(printStream); pour ne pas oublier les printStackTrace() declenches par le catch