2012-04-12 7 views
0

Ich bin ein Neuling in Andoird.ImageView Klicken Sie auf Best Practice

In meinem Fall habe ich ein Szenario, dass beim Klicken auf einen bestimmten Teil eines Bildes onclick Ereignisse auslösen wird. Ich habe versucht, die Position zu erkennen, wenn das onTouch ausgelöst wird, es funktioniert, aber ich denke, es ist keine Standardimplementierung. Was ist die beste Vorgehensweise für einen solchen Fall?

danke.

hier Codes wie:

imgView.setOnTouchListener ((OnTouchListener) neue OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) { 
    if(isIn(event.getX(), event.getY(), 124,3,221,36)){ 
     ShowMemberInfo(R.string.app_m01); 
    } else if(isIn(event.getX(), event.getY(), 8,155,72,181)){ 
     .. 
    } 
    return true; 
} 
private boolean isIn(float x, float y, int fx, int fy, int tx, int ty) { 
    return x<tx && x > fx && y<ty && y>fy; 
} 
+0

Können Sie uns Ihre Implementierung zeigen, damit wir wissen, ob es sich um eine Standardimplementierung handelt oder ob es eine Best Practice gibt? – Th0rndike

+0

Ich hatte meine Antwort geändert. :) Vielleicht können Sie versuchen, Rect zu verwenden, um Ihre benutzerdefinierte Erkennungsregion zu definieren, und call contains(), um zu überprüfen, ob sich der Berührungspunkt innerhalb des Bereichs befindet oder nicht. – Chickenrice

Antwort

0
+0

Dies ist wirklich hilfreich ... Unter dem Link kann ein besserer Ansatz sein ... [link] (http://stackoverflow.com/questions/10137657/onclicklistener-issues-after-imagebutton-moved-after-translateanimation) – SICON

0

einfach onClickListener() für Ihre Image implementieren

Der einfachste Weg onClick Ereignis zu implementieren ist. android:onClickMe="methodName" in Ihrem <ImageView> im XML-Layout und definieren Sie diese Methode in Ihrer Aktivitätsdatei.

Zum Beispiel:

public void methodName(View v) 
{ 
    .... 
    .... 

    // do whatever you want for click even ton imageview 
} 
0

Wenn Sie die Position erfassen, verwenden möchten, wo Benutzer (Im Vergleich zu dem Image Benutzer berührt) berührt, können Sie den Berührungspunkt von Motion Objekt erhalten .

Versuchen Sie, einen Touch-Ereignis-Listener für das ImageView zu registrieren und die Position des berührten Punkts aus den Methoden getX() und getY() des MotionEvent-Objekts zu erhalten, wenn das Touch-Ereignis ausgelöst wird. Definieren Sie dann einen rechteckigen Bereich und überprüfen Sie mit contains(), ob der Berührungspunkt innerhalb des Bereichs liegt oder nicht.

ImageView img = new ImageView(this); 
img.setOnTouchListener(new OnTouchListener(){ 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.w("Hit test", "is hit? "+isIn(event.getX(),event.getY(),0,0,120,120)); 
     return false; 
    } 

}); 

private boolean isIn(float x, float y, int fx, int fy, int tx, int ty){ 
    return new Rect(fx,fy,tx,ty).contains((int)x,(int)y); 
} 

Hoffe, dass dies für Sie hilfreich sein wird. :)