PDA

Ver la Versión Completa : [ SOLUCIONADO ] Mejorar velocidad de reacción en cambio de escenas


SmartPhoneLover
22/05/17, 20:56:51
Bueno, creo que ya os habreis hecho una idea de por donde van los hilos, pero os pongo en contexto para clarificar el por què de mi pregunta.

He creado una simple escena con una única imagen a modo de icono en PNG (transparencia), pero esto no es lo central, un simple comentario. La cosa es que dicha escena la he ideado para una aplicación llamada 'Footej Camera', que seguro varios habrán oido, o la habrán probado, o puede que la tengan instalada; pues como sabrán, esta app no cuenta con un icono dedicado a salida/cierre de la aplicación, como ocurre con la tan conocida 'Cameringo'. Basandome en ésta última, quise agregar el mismo botón a la app ya comentada anteriormente, que es la que uso en la actualidad.

Ahora bien, ¿para que se me ocurre agregar algo así?, o, aunque su cometido este bien pensado o sea lógico, ¿no es innecesario dicho icono?, pudiendo cerrar la app con los botones del dispositivo?
OK. Actualmente mi dispositivo es un LG K10 (1280x720), y botones virtuales; los cuales he ocultado de manera permanente por simple comodida (ganar espacio en pantalla), y para ver el screen más limpio. Vamos, es mi desición, mi gusto.
Con ayuda de otra app llamada 'Simple Control' he agregado de nuevo los botones virtuales, pero esta vez con la posibilidad de ocultarlos, modificarlos a mi gusto, etc.

Bien, ahora que ya estan en contexto...
Al usar la app 'Footej Camera', para cerrarla tengo que deslizar desde la aparte derecha de la pantalla (zona de control de disparo, flash, y galeria de fotos) con el dedo para desplegar los botones virtuales de 'Simple Control'. Hay veces que o, lo hago rápido, o deslizo fuera del área (esquinas) que he especificado para 'Simple Control' detecte los toques, y por tal motivo, ocurre que se dispara la cámara accidentalmente, o toco algún otro botón, o simplemente no le doy a la primera y los botones no aparecen.
Por ello he querido crear una especie de botón, aunque virtual, pero funcional, ya que la app no trae dicha opción. Cerrar la aplicación con un icono destinado a ello.

Ya habiendo explicado todo acerca del tema visual y funcionar del botoncito, vamos al problema principal.
El botón, y sus acciones a realizar funcionan de maravilla, se muestra en la zona de pantalla donde quiero que se vea en cada momento, dependiendo de como coloco el dispositivo en modo vertial u horizontal. (los iconos propios de la app cambian de posición dependiendo de la orientación de la misma)
El tema es que cuando roto el terminal, y la app responde cambiando la disposición de sus iconos internos, la escena en Tasker también lo hace, pero al parecer los perfiles se retrasan, a veces unos segundos, y otras (más, por suerte) unas pocas centésimas de segundo, por lo que en cuanto al aspecto visual no queda muy chulo que digamos. Es decir, que el resto de los botones de la propia app ya hayan ocupado su posición final, y la escena de Tasker aún este pensado cual era su posición. (retraso en respuesta)
Pero esto no es lo que más me preocupa, sino que al rotar, la escena, antes de que los perfiles detecten el cambio de rotación, modifica su posición automáticamente antes de que los perfiles hagan su trabajo. Más tarde la escena, se ubica en el otro extremo de la pantalla, respondiendo a uno de los perfiles activados.

¿Què quiero decir con esto?
Pues, si coloco el icono en la esquina superior derecha, estando el terminal en posición VERTICAL; roto el dispositivo horizontalmente (90º a izquierda), se nota como durante unas fracciones de segundo el icono (la escena) responde a su propia configuración, posicionándose ésta, tan rápido Tasker detecte el cambio de rotación, en la esquina superior derecha del mismo. Y más tarde, cuando el perfil en Tasker detecta el cambio, recien ahora es cuando la escena se crea nuevamente, pero esta vez en la nueva posición que yo deseo: esquina inferior izquierda.

SmartPhoneLover
22/05/17, 21:10:33
Aquí os adjunto unas capturas tomadas en el orden en el cual ocurren las cosas descritas en los dos últimos parrafos del tema principal.

Imagen 1
Aquí se ve la ubicación donde se muestra la escena (icono apagar) nada más iniciar la app, y en modo vertical. PERFECTO.
Imagen 2
Momento en el que la propia configuración de la escena responde antes que los perfiles de rotación.
Imagen 3
Esta es la posición donde debe ir el icono en el modo horizontal. Aquí el perfil correspondiente ya se ha ejecutado.
Imagen 4
Y esta imagen representa lo mismo que la nº 2, pero estando en el modo horizontal, y queriendo volver al vertical.

danko9696
22/05/17, 21:49:32
No entiendo bien por qué no deslizas desde la izquierda, así te libras de activar accidentalmente la cámara, y en lugar de Simple Control usar algún control estilo pie, como el de GravityBox u otro.

No se si el motivo principal será el lag a la hora de activarse los perfiles pero sí sé por experiencia (salvo que haya alguna mejora reciente) que Tasker es horriblemente lento a la hora de mostrar/ocultar/mover elementos de escenas, por lo menos las creadas en Zoom.

SmartPhoneLover
22/05/17, 23:26:33
Simplemente porque no quiero. Y los controles Pie, no me gustan por su estilo.

Rsc
23/05/17, 01:44:33
Muchos eventos tardan en reaccionar, y el de orientación de pantalla es uno de ellos.

Cómo has comentado, la escena de Tasker si que responde inmediatamente a la orientación, y el botón, se ubica al instante en la posición que Tasker interpreta que debe colocarse. (En caso de que en vertical el botón lo ubiques en la esquina superior derecha, al ponerlo en horizontal, se posicionará de igual forma en la esquina superior derecha)

Supongo que lo muestras como"capa superpuesta bloqueada"

Una opción que se me ocurre para que no se te vea esos segundos o milisegundos, donde no corresponde, es aprovechando que la escena, si que reacciona inmediatamente, modificar las propiedades de ésta para que se "oculte" al ponerse en modo horizontal.

En propiedades de la escena, en la etiqueta de Orientación debes de poner "Sistema" y en la etiqueta de geometría, seleccionas "paisaje" y modifica su tamaño por 1*1 (0*0) no se puede.

Luego ya muestras la escena que reacciona al evento de posición horizontal, y claro, deberás tener dos escenas, ya que la primera en modo horizontal no muestra nada. Edito el texto en rojo por una opción que creo que es más óptima.

Ya contarás si te vale así. Un saludo

EDITADO: No había caído, pero no es necesario crear dos escenas, creo que es preferible modificar el tamaño de la escena o del elemento mediante una acción de Tasker

SmartPhoneLover
23/05/17, 15:44:15
- Efectivamente, tengo la escena creada en resolución '75x75', es decir el mismo tamaño que ocupa en sí el propio icono. Y las tareas asociadas a la misma, la crean como una Capa Superpuesta Bloqueada.
- Con respecto donde comentas la posible solución, no comprendo exactamente lo que hace esa nueva configuración tuya. Previamente, ya tenia establecido en 'Orientación': Sistema, y en 'Geometria': en realiad Retrato. Pero probé a cambiarlo a Paisaje, pero no noto nada diferente.

Nota:
- En éste mensaje adjunto el .xml de todo para que puedas echarle un vistazo.

Muchos eventos tardan en reaccionar, y el de orientación de pantalla es uno de ellos.

Cómo has comentado, la escena de Tasker si que responde inmediatamente a la orientación, y el botón, se ubica al instante en la posición que Tasker interpreta que debe colocarse. (En caso de que en vertical el botón lo ubiques en la esquina superior derecha, al ponerlo en horizontal, se posicionará de igual forma en la esquina superior derecha)

Supongo que lo muestras como"capa superpuesta bloqueada"

Una opción que se me ocurre para que no se te vea esos segundos o milisegundos, donde no corresponde, es aprovechando que la escena, si que reacciona inmediatamente, modificar las propiedades de ésta para que se "oculte" al ponerse en modo horizontal.

En propiedades de la escena, en la etiqueta de Orientación debes de poner "Sistema" y en la etiqueta de geometría, seleccionas "paisaje" y modifica su tamaño por 1*1 (0*0) no se puede.

Luego ya muestras la escena que reacciona al evento de posición horizontal, y claro, deberás tener dos escenas, ya que la primera en modo horizontal no muestra nada. Edito el texto en rojo por una opción que creo que es más óptima.

Ya contarás si te vale así. Un saludo

EDITADO: No había caído, pero no es necesario crear dos escenas, creo que es preferible modificar el tamaño de la escena o del elemento mediante una acción de Tasker

WillyWeb
23/05/17, 19:59:11
... al rotar, la escena, antes de que los perfiles detecten el cambio de rotación, modifica su posición automáticamente antes de que los perfiles hagan su trabajo. Más tarde la escena, se ubica en el otro extremo de la pantalla, respondiendo a uno de los perfiles activados ...

No he cargado tu proyecto en mi dispositivo, pero esa frase me ha dejado un poco mosca. Veamos si lo he entendido :rolleyes:

Tienes al menos un par de perfiles que detectan la posición del dispositivo y en función de esa posición, a base de tareas y acciones, cambias la posición de la escena ¿es así?

¿Has probado a dejar que sea la escena la que se adapte al cambio de posición? De esa forma sólo necesitarías un perfil para lanzar la escena al iniciarse la aplicación y ya no tendrías que intervenir en nada más.

Si buscas velocidad lo mejor es hacerlo simple, y esa sería la forma más simple.

Esta solución te ocasionaría nuevos problemas ya que la escena tiene que cubrir, como poco, todo es espacio por el que se tiene que mover el botón, y por lo que veo en las capturas lo desplazas de una punta a la opuesta ... mal asunto.

Tendrás que encontrar la forma de hacer la escena tan pequeña como sea posible y colocarla en la posición adecuada para que todo cuadre al cambiar la posición del dispositivo... tienes entretenimiento :silbando:

SmartPhoneLover
23/05/17, 20:29:11
Quizás no me he explicado bien en esa parte que has señalado.
Lo que quise decir es que, como aclaras unas lineas más abajo, dispongo de dos perfiles (más otro que es el principal, el cual lo tengo permanentemente encendido y es el encargado de actuar al iniciar la cámara), los cuales se activan dependiendo de la posición del terminal en cada momento (en vertical, u horizontal).

Con respecto a lo que comentas de dejar que sea la propia escena la que se ajuste automáticamente a la nueva posición. He intentado, y en realidad fue de las cosas en las que pensé al principio, pero hasta ahora no he dado con la forma de que la escena de posicione en el lugar en el que yo quiero que acabe. Sino que simplemente responde de manera lógica, pero no como yo desearia. Para ello, he tirado de dos acciones, las cuales estan asociadas a los perfiles anteriormente descritos; cada uno realiza las mismas acciones: destruir escena, y volver a crearla con la nueva posición (controles deslizantes).

En cuanto al desplazamiento de la escena de una punta a la otra, pies si. Como he creado la escena del mismo tamaño que las dimensiones que quiero que tenga el propio icono, pues me veo en la obligación de especificar manualmente cada posición final.

No he cargado tu proyecto en mi dispositivo, pero esa frase me ha dejado un poco mosca. Veamos si lo he entendido :rolleyes:

Tienes al menos un par de perfiles que detectan la posición del dispositivo y en función de esa posición, a base de tareas y acciones, cambias la posición de la escena ¿es así?

¿Has probado a dejar que sea la escena la que se adapte al cambio de posición? De esa forma sólo necesitarías un perfil para lanzar la escena al iniciarse la aplicación y ya no tendrías que intervenir en nada más.

Si buscas velocidad lo mejor es hacerlo simple, y esa sería la forma más simple.

Esta solución te ocasionaría nuevos problemas ya que la escena tiene que cubrir, como poco, todo es espacio por el que se tiene que mover el botón, y por lo que veo en las capturas lo desplazas de una punta a la opuesta ... mal asunto.

Tendrás que encontrar la forma de hacer la escena tan pequeña como sea posible y colocarla en la posición adecuada para que todo cuadre al cambiar la posición del dispositivo... tienes entretenimiento :silbando:

Rsc
24/05/17, 01:02:07
Buenas, iba a tratar de explicar de nuevo como camuflar esos milisegundos que la escena tardaba en cambiar de ubicación, pero al ver tu proyecto, me he dado cuenta que hay una opción que te lo va a solucionar de manera más rápida y limpia en lo que a número de acciones se refiere.

Veo que para detectar la orientación, estas utilizando el estado Sensor / Orientación, y después de probarlo me he dado cuenta de que reacciona mucho más rápido al estado de Pantalla / Orientación Pantalla

Este que te digo solo tiene la opción de Vertical y Horizontal, pero entiendo que es lo único que necesitas. El estado de Sensor está pensado para detectar otro tipo de movimientos.

De todas maneras para que no quede en el aíre, en relación a lo que te había comentado anteriormente, aclaro lo siguiente:

Previamente, ya tenia establecido en 'Orientación': Sistema, y en 'Geometria': en realiad Retrato. Pero probé a cambiarlo a Paisaje, pero no noto nada diferente.

Cuando creas una escena, en las propiedades de la misma podemos configurar como queremos que se vea en cada estado de orientación.

En el menú desplegable de Orientación, seleccionamos Sistema, en Geometría, teniendo seleccionado en el menú desplegable Retrato , asigno el tamaño (W*H) que quiero que tenga la escena en posición vertical en tu caso 112*112, a continuación seleccionamos el menú desplegable Paisaje y le ponemos el tamaño que queramos que tenga la escena cuando el teléfono se encuentre en horizontal. En tu caso le deberías poner 1*1 así en cuanto el móvil se ponga en horizontal, desaparecería la escena.

Una vez conseguido esto, luego ya destruyes la escena y la muestras nuevamente en la posición que quieres que se vea con el teléfono en modo horizontal.

Los milisegundos, seguirán presentes en el tiempo que va a tardar en mostrarse la escena nuevamente, pero por lo menos no te ocurrirá lo de las imágenes 2 y 4, que se te muestran en un lugar no deseado, superponiendo los iconos de la aplicación.

No obstante confío en que no te haga falta hacer esto cuando cambies el perfil y pongas el estado que te he comentado.

Un saludo!

SmartPhoneLover
24/05/17, 18:47:41
OK, aplicando parte de tu recomendación sobre la modificación de las dimensiones de la pestaña 'Geometria' a 1x1, ya funciona todo perfecto ahora. Es más, ahora reacción instantáneamente al cambio de posición, pero para ello cambie los perfiles de rotación (sensores) por los de posición de pantalla.

Pues como todo funciona a la mil maravillas ya, doy el tema por solucionado. ;)

Muchas gracias a los tres por la ayuda!!!!