Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Detectar toque en mapa de bits

Saludos,

¿Alguien cómo voy sobre la detección cuando un usuario presiona en un mapa de bits que está dentro de un lienzo?

  • ¿Cómo explorar Google Play en la web en otro país?
  • ¿Cómo implementar una base de datos SQLite en Phonegap?
  • ¿Cómo puedo conseguir que el botón hecho aparezca en el teclado suave?
  • ¿Cómo usar Bluetooth en el emulador de Android?
  • Botón central en LinearLayout
  • Cómo volver a habilitar la paleta de diseño en Android Studio
  • Gracias

  • Error de ejecución de la tarea ': app: compileDebugNdk'
  • Cómo administrar `startActivityForResult` en Android?
  • ¿Es Sqlite Database thread de instancia seguro
  • Copiar imagen al portapapeles en android
  • Cómo detectar errores de variables de recursos en Android Studio (por ejemplo: "% 1 $ s")
  • Terminado con valor de salida no cero 3
  • 3 Solutions collect form web for “Detectar toque en mapa de bits”

    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 es necesario manejar el case MotionEvent.ACTION_MOVE y el case MotionEvent.ACTION_UP para asegurarse de que se ocupa correctamente de la entrada del usuario. El método onTouchEvent se llama cada vez que el usuario: coloca un dedo hacia abajo, mueve un dedo ya 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 comprobar si alguien está tocando dentro de su mapa de bits, debe hacer algo como establecer un booleano que el toque se inició dentro del mapa de bits en ACTION_DOWN y, a continuación, compruebe en ACTION_UP que todavía está dentro del mapa de bits.

    Steve, Google tiene un gran artículo y tutorial para el manejo de eventos UI @ http://developer.android.com/guide/topics/ui/ui-events.html . Esto es lo que me hizo empezar y fue genial para mí 🙂

    Esto detectará un toque y comprobará si no es transparente. Necesita esto si sus bitmaps no son rectángulos. MyBitmap es sólo una clase de contenedor simple 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 contacto para completar

      @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; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.