IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Appeler un drawable dans le code Java


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut Appeler un drawable dans le code Java
    bonjours, je m'amuse à essayer de faire qqqch d'assez basique mais qui m'a l'air plus compliqué. Je souhaite appeler dans le code java dans un canvas une image stockée dans le drawable. Hors, l'application android ne m'affiche rien.

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new GraphicsView(this));
        }
     
     
      private static class GraphicsView extends View {
      public GraphicsView(Context context) {
                super(context);
            }
                protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
     
                canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image), getHeight(), getWidth(), new Paint());
                invalidate();
            }
     
        }
    }
    Donne un poisson à un homme et tu le nourris pour un jour, apprend lui à pécher et tu le nourris pour toujours.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Le problème c'est que ta vue ne dit à aucune moment la taille qu'elle fait.

    Pour cela il faut appeler setMeasuredDimension(int, int), ce que l'on fait habituellement en surchargeant la méthode onMeasure(int, int).

    Je te conseille cet article, en particulier la partie "Extend onDraw() and onMeasure()".

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    je ne vois pas en quoi cet article peut m'aider.
    lors ce que je teste le getHeight(), getWidth() via un Log j'ai des valeurs.

    Quand j'emploie un code similaire mais avec du texte mis en rond, le texte s'affiche. Pourtant je ne definis nulle part la taille de ma view
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
     
                Path circle = new Path();
     
                int centerX = canvas.getWidth() / 2;
                int centerY = canvas.getHeight() / 2;
                int r = Math.min(centerX, centerY);
     
                circle.addCircle(centerX, centerY, r, Direction.CW);
                Paint paint = new Paint();
                paint.setColor(Color.BLUE);
                paint.setTextSize(30);
                paint.setAntiAlias(true);
     
                //permet d'écrire du texte en cercle
                canvas.drawTextOnPath(QUOTE, circle, 0, 30, paint);
    }
    Donne un poisson à un homme et tu le nourris pour un jour, apprend lui à pécher et tu le nourris pour toujours.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Hmmmm ....

    Dans ce cas là j'essaierais de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image), canvas.getHeight(), canvas.getWidth(), new Paint());
    plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image), getHeight(), getWidth(), new Paint());

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    Si ça aurait été si simple
    même résultat.

    L'image est dans les 3 dossiers drawable.
    Donne un poisson à un homme et tu le nourris pour un jour, apprend lui à pécher et tu le nourris pour toujours.

  6. #6
    Membre actif Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Points : 212
    Points
    212
    Par défaut
    Les deuxième et troisième paramètres de drawBitmap sont left et top, pour indiquer la position du coin supérieur gauche de la bitmap à dessiner dans le canvas: en passant en paramètres getHeight() et getWidth() (soit dit en passant, il y a incohérence à passer une hauteur pour le paramètre left et une largeur pour le paramètre top), cela doit faire en sorte de dessiner la bitmap en dehors de la zone visible du canvas. Essayes en passant 0 comme valeurs pour left et top

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    alleluia. ça marche. J'ai bloqué de manière bête et le fait que j'ai mal lus google doc.
    merci beaucoups chpill, JejeWIll
    Effectivement, l'image était totalement décalée et n'apparaissait pas sur l'écran


    Voici la solution final avec un explicatif de la fonctions en cas ou il y en aurais d'autres qui seraient bloqué comme moi à cause d'une erreur stupide.^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    canvas.drawBitmap/* transformation du drawable en paint */,/* position sur la largeur*/,/*position sur la hauteur*/, /*parametres de l'image*/);
    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image), 0,0, new Paint());
    Donne un poisson à un homme et tu le nourris pour un jour, apprend lui à pécher et tu le nourris pour toujours.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/07/2012, 18h06
  2. Appel refactor dans le code (Java)
    Par Crhys dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 20/04/2011, 11h51
  3. appel d'une vue pl/sql dans du code java
    Par coolcoolcool dans le forum Général Java
    Réponses: 5
    Dernier message: 08/09/2010, 13h49
  4. Réponses: 19
    Dernier message: 04/10/2006, 16h53
  5. Du PL/SQL dans du code Java
    Par tikiwine dans le forum JDBC
    Réponses: 12
    Dernier message: 02/03/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo