2010-03-15 5 views

Répondre

28

Vous devriez travailler avec quelque chose comme ceci:

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

C'est un début, mais vous devez gérer case MotionEvent.ACTION_MOVE et case MotionEvent.ACTION_UP pour vous assurer que vous traiter correctement avec l'entrée de l'utilisateur. La méthode onTouchEvent est appelée à chaque fois que l'utilisateur: met un doigt en bas, déplace un doigt déjà sur l'écran ou lève un doigt. Chaque fois que l'événement porte les coordonnées X et Y de l'endroit où se trouve le doigt. Par exemple, si vous voulez vérifier que quelqu'un tapote dans votre bitmap, vous devriez faire quelque chose comme définir un booléen que le contact a commencé dans le bitmap sur ACTION_DOWN, puis vérifier sur ACTION_UP que vous êtes toujours dans le bitmap.

+0

Je veux utiliser votre code, mais demande comment obtenir x et y du bitmap. Pouvez-vous m'aider dedans? –

+0

Si vous dessinez vos bitmaps sur un canevas, vous devez déjà connaître ses valeurs X et Y car vous devez les passer en argument à la méthode 'canvas.drawBitmap'. –

0

Ceci détectera une touche et vérifiera si elle n'est pas transparente. Vous en avez besoin si vos bitmaps ne sont pas des rectangles. myBitmap est juste une classe de conteneur simple que j'utilise.

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

C'est le sur le code tactile pour l'intégralité

@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; 
} 
Questions connexes