Heim  >  Artikel  >  Erkennen Sie Klicks an bestimmten x- und y-Koordinaten in einer Bildansicht

Erkennen Sie Klicks an bestimmten x- und y-Koordinaten in einer Bildansicht

WBOY
WBOYnach vorne
2024-02-14 08:06:091005Durchsuche

Der PHP-Editor Xigua stellt Ihnen heute vor, wie Sie Klicks an bestimmten x- und y-Koordinaten in imageView erkennen. Bei der Entwicklung mobiler Anwendungen müssen wir häufig Benutzerberührungsereignisse verarbeiten, insbesondere bei Klickereignissen in Bildanzeigesteuerelementen (z. B. imageView). Wir müssen die Standortinformationen des Benutzerklicks genau ermitteln. In diesem Artikel wird ausführlich erläutert, wie Sie die entsprechenden Methoden in Android Studio verwenden, um diese Funktion zu implementieren und Entwicklern dabei zu helfen, Benutzerklickvorgänge besser zu handhaben. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich habe ein Bild auf meinem Desktop, ich habe es mit der Paint-Anwendung geöffnet und eine bestimmte Position mit x- und y-Pixeln erhalten, zum Beispiel: 374.207 px Aber wenn ich das Bild zu meiner Android-App hinzufüge und beispielsweise die Berührungskoordinaten verwende, sind sie dann nicht dasselbe? Wenn ich in der Bildansicht auf die gleiche Position klicke, erhalte ich unterschiedliche Werte und dadurch ist die Nummer der Position viel höher als die Nummer in meinem PC.

Ich arbeite seit etwa drei Tagen an diesem Problem und brauche jetzt Ihre Hilfe.

Ich habe verschiedene Lösungen im Web ausprobiert, zum Beispiel den Versuch, die Berührungsposition umzukehren, um den Pixelwert zu erhalten, wie im folgenden Beispiel: http://android-er.blogspot.com/2012/10/get-touched-pixel-color-of-scaled.html?m=1

Aber die X- und Y-Koordinaten, die ich erhalten habe, sind unterschiedlich x:592 y:496

Das ist mein Android-App-Code:

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

Bearbeiten: Es scheint, als hätte es etwas mit dem Vergrößern des Bildes zu tun, aber jetzt stellt sich die Frage, wie man das gezoomte Bild den x- und y-Werten in der Datenbank zuordnet?

Workaround

Kommentar in Antwort verschieben.

Angenommen, Sie kennen die ursprünglichen Abmessungen (aus der Datenbank?) und können wrap_content für die Ansicht verwenden, dann verwenden Sie (Breite als Beispiel):

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

Höhe (y) wiederholen.

Das obige ist der detaillierte Inhalt vonErkennen Sie Klicks an bestimmten x- und y-Koordinaten in einer Bildansicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen