Maison > Java > Détecter les clics à des coordonnées x et y spécifiques dans une imageView

Détecter les clics à des coordonnées x et y spécifiques dans une imageView

WBOY
Libérer: 2024-02-14 08:06:09
avant
1053 Les gens l'ont consulté

L'éditeur PHP Xigua vous présentera aujourd'hui comment détecter les clics à des coordonnées x et y spécifiques dans imageView. Lors du développement d'applications mobiles, nous devons souvent traiter les événements tactiles de l'utilisateur, en particulier pour les événements de clic dans les contrôles d'affichage d'image (tels que imageView), nous devons obtenir avec précision les informations de localisation du clic de l'utilisateur. Cet article expliquera en détail comment utiliser les méthodes pertinentes dans Android Studio pour implémenter cette fonction, aidant ainsi les développeurs à mieux gérer les opérations de clic des utilisateurs. Nous allons jeter un coup d'oeil!

Contenu de la question

J'ai une image sur mon bureau, je l'ai ouverte à l'aide de l'application Paint et j'ai obtenu une position spécifique contenant x et y pixels, par exemple : 374 207 px Mais lorsque j'ajoute l'image à mon application Android et que j'utilise par exemple les coordonnées tactiles, ne sont-elles pas les mêmes ? Lorsque je clique sur la même position dans la vue d'image, j'obtiens des valeurs différentes et par conséquent le numéro de la position est bien supérieur au numéro sur mon PC.

Je travaille sur ce problème depuis environ trois jours et maintenant j'ai besoin de votre aide.

J'ai essayé différentes solutions sur le Web, comme essayer d'inverser la position du toucher pour obtenir la valeur du pixel, comme dans l'exemple ci-dessous : http://android-er.blogspot.com/2012/10/get-touched-pixel-color-of-scaled.html?m=1

Mais les coordonnées x et y que j'ai obtenues sont différentes x:592 y:496

Voici le code de mon application Android :

View.OnTouchListener imgSourceOnTouchListener
            = new View.OnTouchListener(){
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            float eventX = event.getX();
            float eventY = event.getY();
            float[] eventXY = new float[] {eventX, eventY};

            Matrix invertMatrix = new Matrix();
            ((ImageView)view).getImageMatrix().invert(invertMatrix);

            invertMatrix.mapPoints(eventXY);
            int x = Integer.valueOf((int)eventXY[0]);
            int y = Integer.valueOf((int)eventXY[1]);


            Drawable imgDrawable = ((ImageView)view).getDrawable();
            Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap();


            //Limit x, y range within bitmap
            if(x < 0){
                x = 0;
            }else if(x > bitmap.getWidth()-1){
                x = bitmap.getWidth()-1;
            }

            if(y < 0){
                y = 0;
            }else if(y > bitmap.getHeight()-1){
                y = bitmap.getHeight()-1;
            }
            
            Log.d(TAG,"X:"+x+" Y:"+y);
            return true;
        }};
Copier après la connexion

Edit : Il semble que cela ait quelque chose à voir avec le zoom sur l'image, mais maintenant la question est de savoir comment mapper l'image zoomée avec les valeurs x et y dans la base de données ?

Solution de contournement

Déplacez le commentaire pour répondre.

En supposant que vous connaissez les dimensions d'origine (de la base de données ?) et que vous puissiez utiliser wrap_content sur la vue, utilisez ensuite (la largeur à titre d'exemple) :

public boolean onTouch(View v, MotionEvent event) {

    // get actual width of view on screen (pixels)
    int w = v.getWidth(); 

    // x coordinate in view's coordinate space
    float tw = event.getX(); 

    // ratio between x coordinate and view width
    float ratioVw = (tw / w); 

    // apply same ratio to original image width.
    int origTouchX = (int) (ratioVw * (origW)); //(origW is original width).

    return true;
}
Copier après la connexion

Répétez la hauteur (y).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal