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!
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; }};
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 ?
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; }
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!