2016-04-25 16 views
3

Ich magAndroid - erstellen klickbaren Bereich auf Imageview

"X1": "213", 
"Y1": "174", 
"X2": "339", 
"Y2": "269", 

einen klickbaren Bereich auf Imageview unter Verwendung dieser Daten erstellen, und ich möchte auch eine Aktion mit diesem klickbaren Bereich assoziieren wie zu einem gewissen Aktivität gehen, wenn Tippen auf sie . Ich möchte die in diesem Link angegebene Lösung nicht verwenden. clickable area of image

Weil ich mehrere Imageviews habe und Koordinaten können jedes Mal anders sein. Diese Ordinaten kommen vom Server.

schlagen Sie bitte den besten Weg vor, um dieses Problem zu behandeln.

+0

Sie können ein RecctF-Objekt mit den angegebenen Koordinaten erstellen und onTouchListner zum Anzeigen und Vergleichen Ihres Rechtecks ​​mit dem angeklickten Bereich verwenden. – USKMobility

+0

Sie könnten versuchen, Rectangles ('Rect()'), ein 'onTouchListener()' für das gesamte Layout zu verwenden und zu überprüfen, ob die Ereigniskoordinaten innerhalb Ihres Rechtecks ​​liegen. Es gibt auch ein Layout namens ['AbsoluteLayout'] (http://developer.android.com/reference/android/widget/AbsoluteLayout.html), in dem Sie genaue Standorte angeben können, was ich nicht empfehlen kann, da Sie t unterstützen verschiedene Bildschirmgrößen, wenn Sie es verwenden. – yennsarah

+0

Werden Rectangles (Rect()) auch meine angegebenen Ordinaten entsprechend der Bildschirmgröße skalieren? Wie meine Bildansicht ist Match_parent in Breite und wrap_content in Höhe? –

Antwort

5

Sie können die berührten Stellen sehen:

ImageView iv = (ImageView) findViewById(R.id.image); 
iv.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    log.d(TAG,"Location: " + event.getX() + " , " + event.getY()); 
    } 
}); 

UPDATE 1: Sie können die obere linke Position Ihrer Ansicht wie folgt haben:

int[] viewCoords = new int[2]; 
imageView.getLocationOnScreen(viewCoords); 

Vom können Sie Sehen Sie sich die genaue Position Ihrer Bildansicht an, die berührt wird:

int X = (int) event.getX(); 
int Y = (int) event.getY(); 

int imageX = X - viewCoords[0]; 
int imageY = Y - viewCoords[1]; 
+0

Dazu muss ich zuerst mein Bild auf neue Bildschirmgröße skalieren und dann auch meine Koordinaten für neue Bildschirmbreite skalieren und erst dann kann ich diesen Listener verwenden. Bin ich richtig, mein Herr? –

+0

Lassen Sie mich diese Lösung versuchen und dann werde ich zu Ihnen zurück. –

+0

Danke Kumpel. Ich habe imageX und ImageY von PX nach Dp konvertiert und jetzt denke ich, dass ich meiner Lösung fast nahe bin. Nochmals vielen Dank. –