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 :

Récupérer la position d'un clic sur ImageButton


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut Récupérer la position d'un clic sur ImageButton
    Bonjour,

    j'essaie actuellement de développer un application Android faisant appel à des boutons personnalisés ('j'ai d"ailleurs ouvert un topic à ce sujet).
    J'utilise donc des ImageButton auxquels j'attribut une image (se trouvant dans mes ressources Drawables)
    J'arrive donc à ce résultat :
    Nom : clickposition.PNG
Affichages : 363
Taille : 16,1 Ko


    Or, je ne souhaite pas que le click se déclenche si l'utilisateur appui sur le bouton (carré) en dehors de la zone bleue.
    Pour cela, j'ai besoin de récupérer la position à laquelle le click est effectué, j'ai donc implémenté ce 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
    22
    23
    24
    25
    26
    27
    28
    29
     
    public class MainActivity extends AppCompatActivity {
     
        private ImageButton b1;
        private ImageButton b2;
        private ImageButton b3;
        private ImageButton b4;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            b1 = (ImageButton) findViewById(R.id.imageButton);
            b2 = (ImageButton) findViewById(R.id.imageButton2);
            b3 = (ImageButton) findViewById(R.id.imageButton3);
            b4 = (ImageButton) findViewById(R.id.imageButton4);
     
            b1.setOnTouchListener(new View.OnTouchListener(){
                public boolean onTouch(View view, MotionEvent event) {
                    String s = view.getX() + " " + view.getY();
                    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
     
                    return true;
                }
     
                }
            );
        }
    }
    Malheureusement, quelque soit l'endroit ou j'appui, la position renvoyée est toujours la même (celle visible sur la capture d'écran).

    Auriez vous une solution pour pouvoir récupérer la position exacte du click ? (en prenant en référentiel l'ImageButton et non la totalité de l'écran)

    Merci d'avance !

    PS : Bien que cette problématique soit abordée dans le topic lié au début de celui-ci, j'ai souhaité crée un nouveau topic afin de mieux pointer cette problématique précise plut^t que de rester dans le topic général initial)

  2. #2
    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
    En faisant view.getX() c'est pas la coordonnées du clic que tu récupère mais la coordonnées de la vue sur laquelle tu as cliqué, ce qui ne change évidemment jamais.

    Comme je te l'avais expliqué dans l'autre post c'est l'objet MotionEvent qui contient la position , il faut donc faire :
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut
    Je me permet de rouvrir le sujet, car je susi maintenant confronté à un tout autre problème, en rapport avec la position d'un click sur un ImageButton.

    mon code est le suivant :

    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
     
    public class CercleActivity extends AppCompatActivity {
    private ImageButton cercle;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_cercle);
            cercle = (ImageButton) findViewById(R.id.imageCercle);
            cercle.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                   if (event.getAction()==MotionEvent.ACTION_DOWN) {
                   ImageButton c = (ImageButton) v;
                   Bitmap bitmap = ((BitmapDrawable)c.getDrawable()).getBitmap();
                   int i = bitmap.getPixel((int) event.getX(), (int) event.getY());
                   Toast.makeText(getApplicationContext(),i+" ",Toast.LENGTH_SHORT).show();
                }
                    return true;
                }
            });
     
     
        }
     
    }
    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
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_cercle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="package.com.tracker.CercleActivity">
     
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/cercle"
            android:id="@+id/imageCercle"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true"
            android:background="@android:color/transparent"
            android:layout_centerVertical="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
    Nom : cercleunique.PNG
Affichages : 320
Taille : 17,7 Ko

    Or, lorsque je recupère mon int dans la variable i et que je l'affiche via un toast, celui ci est égal à zéro lorsque j'appui sur n'importe quel forme de couleur (parfois, un bonne valeur s'affiche, sans que je comprene trop comment). La bonne valeur de l'int s'affiche également si j’appuie dans un zone EN DESSOUS du carré de couleur.


    Sauriez vous d'ou le problème peut venir ?

  4. #4
    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
    Est ce que ca pourrait pas être un problème de dimension d'image ?

    Du genre un clic en x=20 y=30 sur l'interface ne corresponde à rien en 20,30 sur ton image ? C'est possible que ton image soit redimensionnée avant d'être affichée.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut
    effectivement, après plusieurs test, il semblerait que mon image soit trop grande.
    Il y avait donc un décalage entre l'image affiché et la manière dont le système percevait le onTouch (en mettant un retour plus rapide des couleur touché, je me suis rendu compte que seul un tiers de l'image était en réalité à l’écran,malgré un affichage correspondant à mes attentes).

Discussions similaires

  1. Récupérer la position de la souris sur une image
    Par megamario dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/04/2011, 13h15
  2. Récupérer la position x et y d'un clic sur l'écran
    Par macRiaz dans le forum Android
    Réponses: 0
    Dernier message: 14/03/2010, 22h46
  3. Identifier la position d'un clic sur une image
    Par swissmade dans le forum Débuter
    Réponses: 6
    Dernier message: 03/01/2010, 13h38
  4. Récupérer la position d'un clic sur une image
    Par visio dans le forum OpenCV
    Réponses: 1
    Dernier message: 24/10/2007, 08h06
  5. [VB.NET] Clic sur ImageButton utilisé dans datagrid
    Par viva-emptiness dans le forum ASP.NET
    Réponses: 6
    Dernier message: 15/06/2005, 00h14

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