Spanish [SOLUCIONADO] Transiciones entre activity

manuel_g

Member
Licensed User
Saludos,

La pregunta es sencilla: La pantalla (o layout) que se ve entre el cambio de un activity a otro se puede manipular o editar?
En algunos casos ni se nota pero en otros puede durar 1 o 2 segundos ahí, en blanco...

Esa pantalla muestra el nombre que se puso en el #ApplicationLabel del Main.

Mil gracias
 

GeoT

Active Member
Licensed User
Hola Manuel.

Estoy investigando el tema.

¿Esa demora cuando te pasa? ¿Cuando finalizas o no la activity anterior?
¿Solamente te ocurre con un móbil o celular viejo con Android antiguo?

Según la página Diseño Android: Transiciones entre Activities, el sistema utiliza un tipo determinado de animación de transición entre activities que se puede sustituir por otro.

Por ejemplo como lo hace Erel en Custom transitions between activities, pero su ejemplo está desfasado en algunas partes y su "paja" no funciona. Pero liberándolo del job si.
Él utiliza dos archivos xml para esa transición concreta.

También la primera página comenta que se puede modificar la transición con el código externo NineOldAndroids. Pero la única librería operativa de b4x que lo adapta y que he encontrado es la de Informatix (NineOldAndroids) pero no sé aún si sirve o no también para la transición entre activities.

Saludos.
 

manuel_g

Member
Licensed User
Hola!

La demora no se presenta entre todos los cambios de Activity, solo en algunos.

Hice la prueba sin finalizar la activity y sucedió exactamente igual

Aquí es donde quisiera mentir: no lo había probado en otros dispositivos y al hacer la prueba pues no pasa eso... A mi defensa (jeje) nunca lo probé en otro dispositivo porque ese desarrollo está diseñado para esas tablets en particular, entonces como que para qué probar con otro...

Igual dejaré la pregunta por si existe otro despistado no pase la pena que ya pasé y más importante es lo del cambio de transición que mencionas. (cambiaré el título, espero eso no infrinja reglas del foro)

Como siempre mil gracias por tu tiempo
 

GeoT

Active Member
Licensed User
Hola Manuel.
De nada.

Me alegra que hayas visto que eso era cosa del dispositivo.

No sé si infringe las reglas al cambiar el título, pero se entiende que quieras que sea más comprensible el asunto.

Sí, es bueno dejar los posts para poder aprender todos. Gracias.

Por último, te comento que las transiciones entre activities se pueden desactivar en la configuración de las herramientas de los desarrolladores. O sea, en las Opciones de programador dentro la configuración de Android, seleccionando "Animación desactivada" en su opción Escala de animación de transición o Escala de transición.

Saludos.
 
Last edited:

manuel_g

Member
Licensed User
Hola

En el Diseñador, en las propiedades del Activity puse 0 en Duración de la animación, entonces ya no se ve viniendo la pantalla de esquina a esquina sino que aparece completa. También probé la opción que das desde desactivar la animación, gracias.

Finalmente se sigue viendo la pantalla esa extraña entre los cambios de activity... y aunque ya vimos que es por el dispositivo, me gustaría igual saber si se pueden editar o montarles una imagen o algo así... Iba a montarte un videito de la app de 500Kb pero me dice q es muy pesado, ni modo

Saludos :)
 

GeoT

Active Member
Licensed User
Hola.

¡Ok, vaya!
No sabía lo de la opción en el Diseñador. Gracias.

En todo el hilo Is it possible to have a foreground animation during transition of Activities? comentan y enlazan con la solución de Informatix, que ahora es gratuita. Pero supongo que una librería más le añadiría más peso a tu aplicación. Pruébalo, si quieres.

Sobre el vídeo que comentas, sé que hay compresores de vídeo.
Si no, otra opción que se me ocurre es que lo subas a un servicio de almacenamiento y compartas su enlace público con quien quieras y si lo ves necesario.

Saludos.
 
Last edited:

GeoT

Active Member
Licensed User
Si vas a probar ese ProgrOvl Example, que sepas que necesita para que funcione solamente la librería OverlayWindow de dentro del paquete ProBundle, que hay que añadirle el código del OverlayPermission, el cual te pedirá permiso para mostrar el panel por encima de la aplicación, y que hay que volver a poner a cero el contador que te muestra ese panel con svcProgrOvl.lngCount = 0 dentro de los eventos Button_Click.

Saludos.
 

manuel_g

Member
Licensed User
ESTA BUENISIMO!

Mirá que probé el ejemplo ProgOvl y funcionó de una, sin modificar nada de nada. Lo implementé en mi proyecto y me arrojó este error:
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@6a42d57 -- permission denied for window type 2038

Luego de dar vueltas, lo solucioné modificando los ajustes del aplicativo en la tablet, dándole permisos para Aparecer encima

Entonces se generan dos dudas:
1- Por qué el ProgOvl funcionó sin tener que modificarle nada a la tablet y en mi proyecto no? Inclusive le puse el Manifest de ProgOvl al mío y ni así
2-Cómo se solicita la autorización de Aparecer encima en el Manifest? Supongo que es lo del OverlayPermission que mencionaste pero no sé como añadirle ese código.

Finalmente (a modo de chisme), me puse a revisar el tema de los servicios y sus usos (una cosa siempre lleva a otra) y creo que tengo que mejorar la forma en que cargo/descargo información desde el servidor hacia la base local, puesto que la carga/descarga la tengo en Módulos de actividad y si el usuario se sale de la app en plena carga se suspende la operación que se está haciendo en cambio en el Servicio no pasaría eso...
Bueno eso no tiene nada que ver con el tema pero es forma de agradecerte por tus respuestas, todas llevan a mejorar!

Mil gracias como siempre!!!
 

angel_

Well-Known Member
Licensed User
Longtime User
La pregunta es sencilla: La pantalla (o layout) que se ve entre el cambio de un activity a otro se puede manipular o editar?
En algunos casos ni se nota pero en otros puede durar 1 o 2 segundos ahí, en blanco...
Creo que te podría servir utilizar B4XPages, revisa el ejemplo de este hilo

 

manuel_g

Member
Licensed User
Creo que te podría servir utilizar B4XPages, revisa el ejemplo de este hilo


Muchas gracias por compartir! Le echaré un vistazo.
 

GeoT

Active Member
Licensed User
Rehola.

No sé por qué te funcionó el código del ejemplo ProgOvl sin tocar nada.
Yo tuve que ampliarlo para que me funcionara. Pero sin tocar el Manifest Editor.
Sí. Simplemente copié y coloqué la parte del OverlayPermission de los ejemplos de OverlayWindow + source v1.2. y un añadido (el Sub Activity_KeyPress (... ).

Pongo aquí solamente lo modificado en el Main:

B4X:
Sub Globals
    Dim OP As OverlayPermission        '--->  permiso para Aparecer encima
End Sub


Sub Activity_Create(FirstTime As Boolean)

    If OP.RequestPermission("OP") Then
        'A permission to draw overlays over applications is required
        Wait For OP_DrawPermission(Allowed As Boolean)                      '-----> Verás que te lleva directamente a la página para aceptar el permiso, si no sobreescribes la app
                                                                                                               ' tras haberlo aceptado anteriormente
    End If

    If OP.IsAllowed Then
        Dim Button1 As Button
        Button1.Initialize("Button1")
        Button1.Text = "Start Activity 2"
        Activity.AddView(Button1, 20dip, 100dip, 220dip, 48dip)
    End If
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event

    If KeyCode = KeyCodes.KEYCODE_BACK Then    'In case you pull back that the app does not close and follow the counter after clicking the button
        tmrActSome1.Enabled = False
        StopService(svcProgrOvl)
        Return True
    End If

    Return False
End Sub

Sub Button1_Click

    Log("Button1_Click")
    tmrActSome1.Initialize("tmrActSome1", 2000) ' Simulates some timeconsuming actions
    tmrActSome1.Enabled = True
    svcProgrOvl.lngCount = 0
    CallSubDelayed(svcProgrOvl, "ShowWindow")
End Sub

Y lo modificado en la activity acTest2:

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event
  
    If KeyCode = KeyCodes.KEYCODE_BACK Then
        Button1_Click
        Return True
    End If
  
    Return False
End Sub


Sub Button1_Click

    Log("#-Button1_Click")
    tmrActSome2.Initialize("tmrActSome2", 2000) ' Simulates some timeconsuming actions
    tmrActSome2.Enabled = True
    svcProgrOvl.lngCount = 0
    CallSubDelayed(svcProgrOvl, "ShowWindow")
End Sub


Sí, correcto, los servicios son para eso. :)

Y desconozco el funcionamiento de las B4XPages que comenta angel_
Lo unico que veo de momento, es que están dentro de la misma activity.

P.D.: Si siguen tus dudas sobre este tema, puedes quitar de momento el Solucionado del título. ¿No?

Saludos.
 
Last edited:

manuel_g

Member
Licensed User
Perfecto!

Ya modifiqué el Main y como esa transición la requiero sí o sí o sí entonces hice un Sub donde entra a solicitar el permiso y solo sale de él con el permiso o cerrando la app (así por las buenas)

Si siguen tus dudas sobre

En realidad no hay dudas pero la solución se fue enriqueciendo más y más con tus nuevas respuestas!

Muchas gracias de nuevo!
 

GeoT

Active Member
Licensed User
De acuerdo Manuel.

Sí, se fue enriqueciendo la solución.

De nada.
Saludos.
 
Top