Checkin si se presiona dentro de rectF en onTouchEvent
He estado trabajando en una pequeña aplicación muy simple usando una vista ampliada. El problema es que no puedo encontrar lo que se ha presionado en mi onTouchEvent. He entendido que tengo que comparar los puntos de presión (xyy) con los elementos y ver cuál podría ser.
Pero … He declarado un rectángulo usando:
- Lienzo dirección drawtext
- Soporte de lienzo HTML5 y vista Web de Android
- Cómo animar un camino en el lienzo - android
- Coordenadas no correspondientes
- Android Dibujo de texto con opengl es se bloquea después de unos minutos
Paint color= new Paint(); color.setColor(Color.BLACK); rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ; canvas.drawRect(rectF, color);
Hasta ahora tan bueno, pero en la función onTouchEvent
public boolean onTouchEvent(MotionEvent event) { int action = event.getAction() ; float x = event.getX() ; float y = event.getY() ; switch(action) { case MotionEvent.ACTION_DOWN: if(rectF().contains(x, y)) { // Something should happen } } invalidate(); return true ; }
Puse el rectF con algún tipo de puntos relativos que van de 0-1, pero el X y Y i obtener de los rangos de eventos de 0 y hacia arriba dependiendo del tamaño de la pantalla.
¿Puedo convertir fácilmente cualquiera de los valores?
Editar
Pensé que alguien estaba interesado en la solución final …
public boolean onTouchEvent(MotionEvent event) { int action = event.getAction() ; float x = event.getX() ; float y = event.getY() ; int width = this.getWidth() ; int height = this.getHeight() ; switch(action) { case MotionEvent.ACTION_DOWN: if(rectF().contains(x/width, y/height)) { // Something should happen } } return true ; }
- Escala de lona y mantenimiento de centro
- ToDataURL no funciona en los navegadores Android
- Texto dinámico en fondo de pantalla en vivo
- HTML5 problemas de lienzo en Android 4.1.1
- Dibujar cuadrado con esquinas redondeadas
- Lona de Android - Dibuja un agujero
- Android: ¿Desplazando eficientemente el contenido de una lona?
- Una suave animación de texto muy lenta en un lienzo de Android, SUBPIXEL_TEXT_FLAG no funciona
Los valores del punto de contacto y del RectF tienen que estar en la misma escala de referencia en oreder para ser comparados correctamente. Lo que significa que si usted declara su RectF
para utilizar tamaños relativos (0-1), tendrá que:
1: normalizar la posición de MotionEvent
por el tamaño de la pantalla
O 2: "desnormalizar" las dimensiones RectF
por el tamaño real de la pantalla.
Creo que 1 es generalmente preferrable, ya que le permite definir sus rects en términos de diseño relativo, independiente del tamaño real de la pantalla y convertir las posiciones de eventos sobre la marcha.
Como esto: rectF.contains(x/screenWidth, y/screenHeight);
Puede recuperar las dimensiones de la pantalla llamando al
Display display = getWindowManager().getDefaultDisplay()
en su actividad y luego llamar a display.getWidth()
o display.getHeight()
- Titanium: cifrado de datos y técnicas de descifrado en dispositivos Android
- Cómo conectar android a MySql servidor de base de datos?