Heim > Java > Hauptteil

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

WBOY
Freigeben: 2024-02-14 08:06:09
nach vorne
1012 Leute haben es durchsucht

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;
        }};
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage