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:

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

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()

  • Android dibujar con desenfoque
  • Implemanting cultivo a mano alzada en android
  • Android gl abierto más lento que la tela?
  • El botón flotante de Android no se muestra
  • Seleccionar cámara trasera en el dispositivo Android - jsartoolkit5
  • Tratando de crear una pintura de borrador para lienzo
  • Palabra envuelta tex en lienzo Android
  • El lienzo de Android se congela
  • Lona de Android, múltiples rutas con diferentes cantidades de zoom
  • Cómo dibujar un gráfico en android como Wifi Analyzer App?
  • Mala mirada del texto en lona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.