2010-03-15 12 views

Respuesta

28

Usted debe trabajar con algo así:

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

eso es un comienzo, pero hay que manejar case MotionEvent.ACTION_MOVE y case MotionEvent.ACTION_UP para asegurarse de que tratar adecuadamente con la entrada del usuario. Se llama al método onTouchEvent cada vez que el usuario: coloca un dedo hacia abajo, mueve un dedo que ya está en la pantalla o levanta un dedo. Cada vez que el evento lleva las coordenadas X e Y de donde está el dedo. Por ejemplo, si desea verificar que alguien haga tapping dentro de su mapa de bits, debería hacer algo como establecer un booleano que el toque comenzó dentro del mapa de bits en ACTION_DOWN, y luego verificar en ACTION_UP que todavía está dentro del mapa de bits.

+0

quiero usar su código, pero pregunto acerca de cómo obtener x e y del mapa de bits. ¿Me puedes ayudar en eso? –

+0

Si dibuja sus mapas de bits en un lienzo, entonces ya debe conocer sus valores X e Y, ya que tiene que pasarlos como un argumento para el método 'canvas.drawBitmap'. –

0

Esto detectará un toque y comprobará si no es transparente. Lo necesita si sus bitmaps no son rectángulos. myBitmap es solo una simple clase de contenedor que uso.

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

Este es el código de toque para la integridad

@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; 
} 
Cuestiones relacionadas