2010-03-15 9 views

Antwort

28

Sie sollten wie so etwas funktionieren:

public boolean onTouchEvent(MotionEvent event){ 
    int action = event.getAction(); 
    int x = event.getX() // or getRawX(); 
    int y = event.getY(); 

    switch(action){ 
    case MotionEvent.ACTION_DOWN: 
     if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth()) 
       && y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) { 
      //tada, if this is true, you've started your click inside your bitmap 
     } 
     break; 
    } 
} 

Das ist ein Anfang, aber Sie müssen case MotionEvent.ACTION_MOVE und case MotionEvent.ACTION_UP zu handhaben Sie sicherstellen, richtig mit der Benutzereingabe umgehen. Die Methode onTouchEvent wird jedes Mal aufgerufen, wenn der Benutzer: einen Finger nach unten zieht, einen Finger bereits auf dem Bildschirm bewegt oder einen Finger hebt. Jedes Mal trägt das Ereignis die X- und Y-Koordinaten, wo der Finger ist. Wenn Sie beispielsweise prüfen möchten, ob jemand in Ihre Bitmap klopft, sollten Sie einen booleschen Wert festlegen, bei dem die Berührung in der Bitmap von ACTION_DOWN gestartet wurde, und dann bei ACTION_UP prüfen, ob Sie sich noch in der Bitmap befinden.

+0

Ich möchte Ihren Code verwenden, aber frage mich, wie die Bitmap x und y zu erhalten. Kannst du mir dabei helfen? –

+0

Wenn Sie Ihre Bitmaps auf eine Zeichenfläche zeichnen, müssen Sie deren X- und Y-Werte bereits kennen, da Sie diese als Argument an die 'canvas.drawBitmap'-Methode übergeben müssen. –

0

Dies wird eine Berührung erkennen und prüfen, ob sie nicht transparent ist. Sie benötigen dies, wenn Ihre Bitmaps keine Rechtecke sind. myBitmap ist nur eine einfache Containerklasse, die ich verwende. Diese

private boolean clickOnBitmap(MyBitmap myBitmap, MotionEvent event) { 
    float xEnd = myBitmap.originX() + myBitmap.width(); 
    float yEnd = myBitmap.originY() + myBitmap.height();; 


    if ((event.getX() >= myBitmap.originX() && event.getX() <= xEnd) 
    && (event.getY() >= myBitmap.originY() && event.getY() <= yEnd)) { 
     int pixX = (int) (event.getX() - myBitmap.originX()); 
     int pixY = (int) (event.getY() - myBitmap.originY()); 
     if (!(myBitmap.getBitmap().getPixel(pixX, pixY) == 0)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return false; 
} 

ist das auf Touch-Code für Vollständigkeit

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (clickOnBitmap(dog, event)) { 
       Toast.makeText(getContext(), "dog", Toast.LENGTH_SHORT).show(); 
      } else if (clickOnBitmap(mouse,event)) { 
       Toast.makeText(getContext(), "mouse", Toast.LENGTH_SHORT).show(); 
      } 
     return true; 
     case MotionEvent.ACTION_OUTSIDE: 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      return true; 
    } 
    return false; 
} 
Verwandte Themen