Spanish (SOLUCIONADO) ¿Cómo implementar un panel emergente lateral derecho?

Seneca

Active Member
Licensed User
Hola.

No encuentro información sobre cómo implementar un panel lateral que, estando oculto, debe aparecer en pantalla al arrastrarlo horizontalmente desde el borde lateral derecho.

Algo así como un NavigationDrawer pero cuyo destino no será la de mostrar un menú, sino otra información.

Otra diferencia que ha de tener con el NavigationDrawer, es que el panel emergente no debe sobreponerse sobre la barra de menú superior.

Supongo que debe ser algo bastante simple, pero no doy con ello.

Saludos.
 

bgsoft

Well-Known Member
Licensed User
Hola Séneca:

Aparte de los dos ejemplos que te han dado lo puedes implementar tu, creas ese panel y lo haces invisible, luego detectas cuando te mueven el dedo por ejemplo en el activity

B4X:
Sub Process_Globals
  Dim XInicial = 0 As Float
End sub

Sub Globals
  Dim PanelLateral As Panel
End sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.Color = Colors.Blue
    PanelLateral.Initialize("PanelLateral")
    Activity.AddView(PanelLateral,100%x,0,50%x,100%y)
    PanelLateral.Visible = False
    PanelLateral.Color = Colors.Red
End sub

Sub Activity_Touch (Action As Int, X As Float, Y As Float)

   ' con esto puedes comprobar cuando pulsan antes de arrastrar y coger X
    If Action= Activity.ACTION_DOWN Then
         ' Puedes verificar si te estan pulsando al borde (por ejemplo al 5%)
         if X > 95%x then
             Xinicial = X
          else
             Xinicial = 0
          end if
     End If

    ' Con esto detectas cuando mueven
    If Action = Activity.ACTION_MOVE Then
        if X < Xinicial then
              ' Mueves el panel cuando desplazan el dedo a la izquierda
              PanelLateral.Visible = True
              PanelLateral.left = X ' o puedes darle un valor para que se mueva mas lento
        End if
    End If

    If Action = Activity.ACTION_UP Then
        ' Aqui dejas de mover el panel y si quieres lo centras donde quieras o los pones a 0
        XInicial =0
    End if
End Sub

Sub PanelLateral_Click
   PanelLateral.Visible= False
End Sub
Esto es solo para que cojas la idea y que veas que no es tan dificil, prueba ese código y veras que funciona. Si quieres moverlo arriba y abajo emplea la Y (tendras que descontar el punto de entrada para que no salte)
Ahh, y podrás darle la altura a tu panel que quieras ;)

La propiedad Touch tambien la tienes en los Paneles por si debajo tienes otro panel en vez del Activity

Saludos
 
Last edited:

Star-Dust

Expert
Licensed User
mírate este hilo también https://www.b4x.com/android/forum/threads/sd-panel-extra-slide-swap-scroll.83673/#post-545567 tiene un slider horizontal muy chevere (creas un layout en el diseñador y lo implementas como un panel horizontal) lo malo es cuando lo vas a cerrar, parece que se pusiera a pelear contigo literal! si lo pruebas y das con la solución se le agradece compartir saludos
It can flow in all four directions

See also SwipePanel
https://www.b4x.com/android/forum/threads/sd-panel-extra-slide-swap-scroll.83673/#post-546345
 

Star-Dust

Expert
Licensed User
I have implemented this panel, my problem is when you slide your finger to close it, it is positioned where the finger is and it becomes tedious to close it. Can you solve that problem?
Write a post in the library thread explaining the problem.
Tomorrow I see if it is possible to solve it
 

Seneca

Active Member
Licensed User
mírate este hilo también https://www.b4x.com/android/forum/threads/sd-panel-extra-slide-swap-scroll.83673/#post-545567 tiene un slider horizontal muy chevere (creas un layout en el diseñador y lo implementas como un panel horizontal) lo malo es cuando lo vas a cerrar, parece que se pusiera a pelear contigo literal! si lo pruebas y das con la solución se le agradece compartir saludos
He probado los dos ejemplos de SlidePanel Class: Sample_PanelExtra.zip y Sample2 SlidePanel.zip de esta librería.

El primero de ellos me da un error de java y no me funciona. El segundo funciona, pero al cerrar el panel da unos saltos un tanto raros. Uso B4A v6.5 y es posible que sea necesaria una versión más actualizada.

Gracias por el aporte.
 

Seneca

Active Member
Licensed User
Hola Séneca:

Aparte de los dos ejemplos que te han dado lo puedes implementar tu, creas ese panel y lo haces invisible, luego detectas cuando te mueven el dedo por ejemplo en el activity

B4X:
Sub Process_Globals
  Dim XInicial = 0 As Float
End sub

Sub Globals
  Dim PanelLateral As Panel
End sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.Color = Colors.Blue
    PanelLateral.Initialize("PanelLateral")
    Activity.AddView(PanelLateral,100%x,0,50%x,100%y)
    PanelLateral.Visible = False
    PanelLateral.Color = Colors.Red
End sub

Sub Activity_Touch (Action As Int, X As Float, Y As Float)

   ' con esto puedes comprobar cuando pulsan antes de arrastrar y coger X
    If Action= Activity.ACTION_DOWN Then
         ' Puedes verificar si te estan pulsando al borde (por ejemplo al 5%)
         if X > 95%x then
             Xinicial = X
          else
             Xinicial = 0
          end if
     End If

    ' Con esto detectas cuando mueven
    If Action = Activity.ACTION_MOVE Then
        if X < Xinicial then
              ' Mueves el panel cuando desplazan el dedo a la izquierda
              PanelLateral.Visible = True
              PanelLateral.left = X ' o puedes darle un valor para que se mueva mas lento
        End if
    End If

    If Action = Activity.ACTION_UP Then
        ' Aqui dejas de mover el panel y si quieres lo centras donde quieras o los pones a 0
        XInicial =0
    End if
End Sub

Sub PanelLateral_Click
   PanelLateral.Visible= False
End Sub
Esto es solo para que cojas la idea y que veas que no es tan dificil, prueba ese código y veras que funciona. Si quieres moverlo arriba y abajo emplea la Y (tendras que descontar el punto de entrada para que no salte)
Ahh, y podrás darle la altura a tu panel que quieras ;)

La propiedad Touch tambien la tienes en los Paneles por si debajo tienes otro panel en vez del Activity

Saludos
No conocía el evento Touch. He probado el ejemplo y funciona perfecto. Solo es necesario completarlo según las necesidades. Da unas posibilidades magníficas.

Con todos estos aportes tengo solución a lo que buscaba.

Gracias por compartir.
 

Seneca

Active Member
Licensed User
Tenía guardada esta librería (hay taaaaantas) pero no la había probado aún y no la recordaba.

Me funciona perfecto.

Gracias.
Hola.

Sigo haciendo pruebas más a fondo y me ha surgido un inconveniente.

Estoy probando SlidingMenu: https://www.b4x.com/android/forum/threads/jfeinstein10-slidingmenu-library.36482/#content en una activity donde a su vez he configurado una ToolBar con la librería AppCompact.

El problema es que al desplegar el SlidingMenu (el que aparece en la derecha del vídeo), me desplaza la Toolbar. Sin embargo, si despliego el menú izquierdo, que está realizado con un DSNavigationDrawer, de la librería DesingSupport, este no me desplaza la ToolBar.

¿Hay forma de que el SlidingMenu de la derecha no me desplace la ToolBar?

(No he abierto un nuevo hilo porque entiendo que esta consulta puede formar parte del actual)

Gracias.

slidingmenu.gif
 

Seneca

Active Member
Licensed User
Rectifico. El SlidingMenu que me aparece por la derecha no me desplaza únicamente la Toolbar, me desplaza el Layout completo. En su lugar, lo que desearía es que el menú derecho se superponga al Layout.

Sigo investigando....
 
Top