Saludos,Detectar contacto en el mapa de bits
¿Alguien sabe cómo hacer para detectar cuando un usuario presiona en un mapa de bits que está dentro de un lienzo?
Gracias
Saludos,Detectar contacto en el mapa de bits
¿Alguien sabe cómo hacer para detectar cuando un usuario presiona en un mapa de bits que está dentro de un lienzo?
Gracias
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.
Steve, Google tiene un gran artículo y un tutorial para el manejo de la interfaz de usuario Eventos @http://developer.android.com/guide/topics/ui/ui-events.html. Esto es lo que me inició y fue genial para mí :-)
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;
}
quiero usar su código, pero pregunto acerca de cómo obtener x e y del mapa de bits. ¿Me puedes ayudar en eso? –
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'. –