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 :

Affichage graphique étrange


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut Affichage graphique étrange
    Bonjour à tous

    Je me lance dans la programmation sous android et j'utilise android studio pour ça avec le langage java.
    J'ai créé une application simple sur laquelle j'ai mis une imageview un bouton et un label
    Quand j'appuis sur le bouton j'affiche dans mon imageview un échiquier avec un pion sur une case de l'échiquier
    Sauf que mon pion ne s'affiche pas là où il le devrait il est légèrement décalé par rapport à la case.

    Voici le code que j'utilise pour faire l'affichage
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bEchiquier=BitmapFactory.decodeResource(getResources(), R.drawable.echiquier);
            bCaseOK=BitmapFactory.decodeResource(getResources(), R.drawable.case_ok2);
        }
     
     public void onBtn(View vue) {
            TextView lbl = (TextView) findViewById(R.id.label);
            if (ONOFF)
                lbl.setText("Bonjour");
            else
                lbl.setText("Au revoir");
            ONOFF = !ONOFF;
     
            ImageView vueJeu = (ImageView) findViewById(R.id.vueJeu);
     
     
            double bc= (bEchiquier.getWidth()-9*bCaseOK.getWidth())/10;
            double ac= bCaseOK.getWidth()+bc;
            Bitmap tempBitmap = Bitmap.createBitmap(bEchiquier.getWidth(), bEchiquier.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas tempCanvas = new Canvas(tempBitmap);
     
            tempCanvas.drawBitmap(bEchiquier, 0, 0, null);
            tempCanvas.drawBitmap(bCaseOK, (int)(3*ac+bc)  ,(int)(2*ac+bc), null);
     
     
            vueJeu.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap));
     
        }

    les variables ac et bc sont sensées me permettre de calculer la position en pixel où je doit dessiner mon pion (bCaseOK) en fonction des coordonnées de la case de l'échiquier.
    En effet lors de mes premières tentative d'affichage je me suis aperçu que les dimensions de mes images avaient été modifiées. Donc j'ai du recalculer les coefficient qui permettent de passer des coordonnées cases aux coordonnées pixel.
    Mais il semblerait que les images ne soient pas redimensionnées tout à fait de la même façon

    Nom : pbaffichage.png
Affichages : 112
Taille : 3,8 Ko

    En mode débug j'ai pu examiner les valeurs de mes coefficients et ce sont des valeurs entière donc pas de problème d'arrondi. Et pourtant le carré bleu (mon pion) s'affiche légèrement à coté de la case où il devrait être

    Si quelqu'un a une idée je suis preneur

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Salut,

    Pourquoi ne pas simplement passer par une gridlayout (https://www.techotopia.com/index.php...yout_Resources) ?

    Pour avoir travailler sur du positionnement d'image dynamiquement, je peux te dire que tu t'engages dans une grosse galère de cette façon. Surtout que ta méthode n'est peut-être pas viable pour d'autres types d'écran.
    Quoiqu'il en soit, ton problème n'a pas l'air si énorme. Il semblerait que tes x et y d'origine pointent au centre du trait d'une intersection. Il faut juste que tu décales à droite et en bas d'une moitié d'épaisseur de trait.

  3. #3
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Turvy Voir le message
    Pourquoi ne pas simplement passer par une gridlayout (https://www.techotopia.com/index.php...yout_Resources) ?
    Je crains que le résultat soit graphiquement désastreux avec cette solution
    Citation Envoyé par Turvy Voir le message
    Pour avoir travailler sur du positionnement d'image dynamiquement, je peux te dire que tu t'engages dans une grosse galère de cette façon. Surtout que ta méthode n'est peut-être pas viable pour d'autres types d'écran.
    Quoiqu'il en soit, ton problème n'a pas l'air si énorme. Il semblerait que tes x et y d'origine pointent au centre du trait d'une intersection. Il faut juste que tu décales à droite et en bas d'une moitié d'épaisseur de trait.
    Oui mais non. Le fait que j'utilise justement les dimensions des bitmaps devrait faire que quelque soit le type d'écran ça fonctionne. Par contre j'ai découvert que le facteur d'échelle n'est pas le même pour les 2 bitmap. Il est de1.7508 pour bEchiquier et de 1.7576 pour bCaseOK. D'où un décalage qui n'est pas constant et qui varie en fonction de la case.

    Ce que j'ai du mal à comprendre c'est pourquoi j'ai 2 facteur d'échelle différents

  4. #4
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut
    Au final je viens de trouver la solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double facteurE = (double) bEchiquier.getWidth() / 634.0;
            double lc = 66 * facteurE;
     
            double bc = (bEchiquier.getWidth() - 9 * lc) / 10;
            double ac = lc + bc;
    Je calcule mon facteur d'échelle sur mon image de fond à savoir mon échiquier.
    Connaissant la taille d'une case je calcule la nouvelle taille de la case avec le facteur d'échelle
    Puis j'utilise cette valeur pour calculer les coefficients

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    La bonne solution pour ce que tu fais est dessiner toi même l'échiquier et les différents éléments via une vue custom.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par grunk Voir le message
    La bonne solution pour ce que tu fais est dessiner toi même l'échiquier et les différents éléments via une vue custom.
    Je vais regarder ça. J'ai déjà repéré cet article https://developer.android.com/traini...ws/create-view Si tu en connais d'autre je suis preneur

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu as tout ce qui te faut dans la série de guide de google que tu as trouver.
    La partie pour le dessin : https://developer.android.com/traini...custom-drawing

    Il faudra surement faire un peu de math pour savoir dans quelle case tu clic (en fonction des coordonées) mais rien de très compliqué normalement.

    L'avantage de cette solution c'est que tu peux vraiment faire tout ce que tu veux.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Acceleration de l'affichage graphique
    Par fumiste972 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 08/06/2006, 11h21
  2. [MFC Visual C++]conseil sur affichage graphiques
    Par C++beginner dans le forum MFC
    Réponses: 6
    Dernier message: 10/01/2006, 06h47
  3. Mode d'affichage graphique 13h ?
    Par xavman dans le forum Assembleur
    Réponses: 24
    Dernier message: 08/02/2005, 14h06
  4. Affichage graphique sous forme de tableau.
    Par eulone dans le forum C++
    Réponses: 2
    Dernier message: 24/11/2004, 20h34
  5. [TP]Affichage graphique
    Par maleklegolas dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 02/11/2003, 19h42

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