Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 15/09/13, 20:37:05
Array

[xs_avatar]
yerayvg yerayvg no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2013
Mensajes: 11
Tu operador: Movistar

onTouch() y Circulos

Buenas.

Quiero tener un area de la pantalla donde capturar el evento onTouch() y determinar si el usuario esta describiendo un circulo hacia la derecha o hacia la izq, para tomar una acción u otra según el caso.

De momento lo qeu tengo es una Actividad que hereda de FragmentActivity e implementa OnTimeSetListener (por que estoy usando un TimePicker) y tengo sobreescrito el evento public boolean onTouchEvent(android.view.MotionEvent e).

El evento onTouch me captura el movimiento de tooda la pantalla de la actividad (excepto sobre los botones que tengo), pero mi gran problema es que no se como determinar si el usuario ha dibujado un circulo con el dedo hacia la izq o hacia la derecha como ya he dicho.

A alguiens e le ocurre algo? alguna idea?

Gracias.
Responder Con Cita


  #2  
Viejo 15/09/13, 22:19:26
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
¿Con círculo a la derecha o izquierda te refieres a como el desbloqueo en algunos móviles? Es decir, ¿simplemente moviendo el dedo hacia la izquierda o hacia la derecha?

¿O te refieres a dibujar un círculo real sobre la pantalla?

Si es el primer caso, es bastante fácil, si es el segundo caso es bastante bastante bastante difícil. Además que tendrías que "suavizar" el algoritmo para que reconozca círculos que no sean perfectos.
Responder Con Cita
  #3  
Viejo 16/09/13, 09:17:21
Array

[xs_avatar]
yerayvg yerayvg no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2013
Mensajes: 11
Tu operador: Movistar

Pues por desgracia es lo segundo... La idea es simular el funcionamiento de la rueda del ipod. Anoche me di cuenta que la radio de android, es una aproximación a lo que quiero... claro que se basa solo en el desplazamiento de +/- X. y no es un circulo completo.

Ah..y mas uqe dibujarlo... sería solo "enteder" que lo está dibujando.

Última edición por yerayvg Día 16/09/13 a las 09:20:12.
Responder Con Cita
  #4  
Viejo 16/09/13, 12:15:06
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Tu problema entonces no es saber si el usuario está dibujando un círculo -que es más difícil-, únicamente calcular el ángulo con la horizontal tomando como referencia el centro y ver si crece o decrece.

El cálculo es sencillo con la función atan (arcotangente) y las coordenadas x,y respecto del centro de la rueda de control. Con eso ya sabes el ángulo y cada vez que se mueva solo tienes que comparar con el valor anterior.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 16/09/13, 14:27:11
Array

[xs_avatar]
yerayvg yerayvg no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2013
Mensajes: 11
Tu operador: Movistar

Si.. a lo largo del día he estado mirando como conseguir, y llegué a esa idea (de basarme en el angulo)
http://math2.org/math/geometry/circles.htm
http://www.dmae.upct.es/~pepemar/home.htm

Ahora a ver como consigo aplicarlo.... Una cosa más, ¿Para capturar el ontouch() solo en un area determinada tengo que controlarlo desde la actividad y ver si has pulsado sobre mi circunferencia imaginaria? o hay otra forma que automaticamente maneje el ontouch solamente en una circunferencia (shape) dibujada?
Responder Con Cita
  #6  
Viejo 16/09/13, 14:33:06
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

 Cita: Originalmente Escrito por yerayvg Ver Mensaje
¿Para capturar el ontouch() solo en un area determinada tengo que controlarlo desde la actividad y ver si has pulsado sobre mi circunferencia imaginaria?
Exacto, calculas la distancia del punto de toque al centro de la rueda, si es mayor lo ignoras (idealmente devuelves false en el onTouch pues no estás tratando el evento).
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 16/09/13, 22:59:46
Array

[xs_avatar]
yerayvg yerayvg no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2013
Mensajes: 11
Tu operador: Movistar

Bueno..he conseguido avanzar bastante pero aun tengo cosas en el aire. Cuando acabe, pondré la solución bien explicada.

Otra PREGUNTA: He trabajado con los ángulos resultantes, tras transportar las coordenadas X,Y al nuevo sistema de coordenadas. He intentado realizar un método para poder saber si estas describiendo el circulo hacia la izq o hacia la derecha, en base a si el angulo anterior es mayor o menor al actual (con el evento onTouch). Mis angulos van de 0 a 360.... y he aqui donde tengo el "problema". Cuando paso desde el primer cuadrante al cuarto, o del cuarto al primero... ya que pasamos de un angulo muy pequeño (aprox 0) a uno muy grande (aprox 360)....

Mas o menos lo tengo resuelto, pero me he fijado que los valores de ontouch() son muyy sensibles, y aunque tu no levantes el dedo, no son continuos (supongo que depende de la densidad de la pantalla), el caso... es que esto depende también de la velocidad con la uqe muevas el dedo....y claro.. si me muevo muy rápido al pasar por el angulo 0 no soy capaz de determinar si he pasado o no....

No sé si me he explicado suficientemente bien, pero la pregunta es si hay algún metodo para controlar esto y que responda con mas precision el ontocuh()...

Gracias.
Responder Con Cita
  #8  
Viejo 16/09/13, 23:22:44
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

No son continuos para no freir a la app con eventos, en versiones antiguas de Android dejar el dedo puesto era sinónimo de un consumo de CPU alto porque no hacía más que disparar el evento para nada.

Si va muy rápido y no sabes decir a ciencia cierta si ha ido a un lado o para otro, lo mejor es que lo ignores y vuelvas a empezar la toma de muestras para determinar la dirección.

Para evitar cierto desconcierto del usuario la rueda debería tener feedback visual y moverse a la vez que el dedo (vale, la del ipod no tenía... pero aquí sería recomendable al menos unos puntitos que giren para dar a entender que es una rueda que gira y saber si ha girado o no).

En cualquier caso, el análisis del gesto táctil lo tienes que hacer tú en base a los eventos, no te queda otra. Lo normal es definir unos thresholds o límites, tanto de tiempo como de espacio. Si el último toque fue hace T o más es que empieza un posible gesto nuevo, si no es que está continuando el gesto actual. Idem con el espacio, si están muy separados los puntos no puedes asegurar que sea un gesto, igual se han perdido pulsaciones intermedias.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 17/09/13, 11:02:13
Array

[xs_avatar]
yerayvg yerayvg no está en línea
Usuario novato en la web
 
Fecha de registro: sep 2013
Mensajes: 11
Tu operador: Movistar

Umm ok... pues a pensar como llevarlo a cabo...Esto va para largo jejej :P..pero gracias.. Me gusta pensar y entender las cosas mientras no me quede pillado.

Lo del apartado visual... esta claro que lo tengo pendiente.. Las otras cosas si que no había pensado en ellas.

bueno ya te iré preguntando más cosas, a medida que avance.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 15:51:38 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /