He estado trabajando en una pequeña aplicación muy simple con 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 (x e y) con los elementos y ver cuál podría ser.Registro si se presiona dentro de rectF en onTouchEvent
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 aquí todo bien, 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 ;
}
fijo el rectF con algún tipo de relación puntos que van de 0 a 1, pero la X e Y que obtengo de los eventos varían de 0 en adelante 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 ;
}
me di cuenta de que en vez quería que la anchura y la altura de la vista, por lo que usó 'this.getHeight()' y 'this.getWidth()' en su lugar. – dubbe
@dubbe seguro, no estaba al tanto de su contexto, así que di consejos sobre el caso más simple – kostja
Lo sé, y fue un consejo perfecto, ¡simplemente lo aclaré en caso de que alguien más esté buscando lo mismo! – dubbe