Spanish [SOLUCIONADO]Diseño botones

elrinconin

Member
Licensed User
Hola amigos,
ante todo soy nuevo en esto del basic4android.
El tema es el siguiente, creo unos botones en tienpo de ejecucion en forma de cuadricula.

Panel1.Panel.AddView(But,Columna*(Button1.Width),Fila*(Button1.Height),Button1.Width,Button1.Height)

Salen muy bien, un formato muy chulo, con bordes redondeados ... El tema es el siguiete, cuando pulso un boton, lo combierto a rojo con Bt.color=Colors.Red , me lo combierte a rojo, pero el fotmato es un cuadrado un poco feote. ¿como se puede poner en rojo, pero manteniendo el formato que tenia inicial?

Gracias.
 

Attachments

mlc

Active Member
Licensed User
Hola

Para convertirlo a rojo, en el evento click del botón le envías el nuevo bm

B4X:
Sub Globals
        Dim BtLoqueSea As Button
End Sub

Sub Algo
         BtLoqueSea.Background = StateListDrawableR("Activo.png")
End sub

Sub BtLoqueSea_Click
         if BtLoqueSea.Tag = 0 then
                  BtLoqueSea.Background = StateListDrawableR("Rojo.png")
                  BtLoqueSea.Tag = 1
         end if
End sub


Sub StateListDrawableR(bm As String) As StateListDrawable

        'imagen que se muestra cuando esta activo
        Dim bdenabled As BitmapDrawable
        bdenabled.Initialize(LoadBitmap(File.DirAssets, bm))
        bdenabled.Gravity = Gravity.FILL

        'imagen que se muestra el presionar
        Dim bdpress As BitmapDrawable
        bdpress.Initialize(LoadBitmap(File.DirAssets, "Presionado.png"))
        bdpress.Gravity = Gravity.FILL

        'imagen que se muestra cuando esta inactivo
        Dim bddisabled As BitmapDrawable
        bddisabled.Initialize(LoadBitmap(File.DirAssets, "Inactivo.png"))
        bddisabled.Gravity = Gravity.FILL


        Dim sld As StateListDrawable
          sld.Initialize
          sld.AddState2(Array As Int(sld.State_enabled, -sld.State_Pressed), bdenabled)
          sld.AddState(sld.State_Pressed, bdpress)
          sld.AddState(sld.State_Disabled, bddisabled)
          Return sld

End Sub
De esta manera puedes enviarle tambien un bitmap cuando lo presionas.

Si lo haces con gradient:
B4X:
Dim b as Button
  b.initialize("b")
Dim Gradient1 As GradientDrawable
Dim clrs(2) As Int
clrs(0) = Colors.RGB(255,165,0)
clrs(1) = Colors.RGB(255,0,0)
Gradient1.Initialize("TOP_BOTTOM",clrs)
Gradient1.CornerRadius = 5dip
b.Background= Gradient1
En el evento click, cambia Colors.RGB(255,165,0) por esto Colors.RGB(255,0,0)

Espero te sirva

Saludos
 
Last edited:

elrinconin

Member
Licensed User
Gracias miguel, lo voy a poner en practica.

Hola

Para convertirlo a rojo, en el evento click del botón le envías el nuevo bm

B4X:
Sub Globals
        Dim BtLoqueSea As Button
End Sub

Sub Algo
         BtLoqueSea.Background = StateListDrawableR("Activo.png")
End sub

Sub BtLoqueSea_Click
         if BtLoqueSea.Tag = 0 then
                  BtLoqueSea.Background = StateListDrawableR("Rojo.png")
                  BtLoqueSea.Tag = 1
         end if
End sub


Sub StateListDrawableR(bm As String) As StateListDrawable

        'imagen que se muestra cuando esta activo
        Dim bdenabled As BitmapDrawable
        bdenabled.Initialize(LoadBitmap(File.DirAssets, bm))
        bdenabled.Gravity = Gravity.FILL

        'imagen que se muestra el presionar
        Dim bdpress As BitmapDrawable
        bdpress.Initialize(LoadBitmap(File.DirAssets, "Presionado.png"))
        bdpress.Gravity = Gravity.FILL

        'imagen que se muestra cuando esta inactivo
        Dim bddisabled As BitmapDrawable
        bddisabled.Initialize(LoadBitmap(File.DirAssets, "Inactivo.png"))
        bddisabled.Gravity = Gravity.FILL


        Dim sld As StateListDrawable
          sld.Initialize
          sld.AddState2(Array As Int(sld.State_enabled, -sld.State_Pressed), bdenabled)
          sld.AddState(sld.State_Pressed, bdpress)
          sld.AddState(sld.State_Disabled, bddisabled)
          Return sld

End Sub
De esta manera puedes enviarle tambien un bitmap cuando lo presionas.

Si lo haces con gradient:
B4X:
Dim b as Button
  b.initialize("b")
Dim Gradient1 As GradientDrawable
Dim clrs(2) As Int
clrs(0) = Colors.RGB(255,165,0)
clrs(1) = Colors.RGB(255,0,0)
Gradient1.Initialize("TOP_BOTTOM",clrs)
Gradient1.CornerRadius = 5dip
b.Background= Gradient1
En el evento click, cambia Colors.RGB(255,165,0) por esto Colors.RGB(255,0,0)

Espero te sirva

Saludos
 
Top