Android Code Snippet CLVSwipe with images

I modified CLVSwipe to allow images, not just text on the Swipe. Relevant Code is below (Hope I got it all;))

REQUIRES AN IMAGE IN ASSETS Trash.jpg here it is if you want to copy it.

note that I am not doing anything at this point to scale the images. Should probably add the aspect ratio of the image to the TYPE and use that to scale it.


'New Type in CLVSwipe - required for the text return value as bitmaps don't have a tag.
'New Type in CLVSwipe
Sub Class_Globals
    Type SwipeImage(Bmp As Bitmap, RetVal As String)

New code in CreateActionButtons
and New SubTo handle the Panel Type instead of the Label
NOTE: I also modified this for unlimited buttons. The just keep getting narrower and narrower:p
Private Sub CreateActionButtons (actions As List) As Int
    Dim LastX As Int = 0
    Dim width As Int = ActionsPanel.Width / actions.Size   'kim
    For Each action As Object In actions
        If action Is String Then
            Dim l As Label
            Dim xlbl As B4XView = l
            xlbl.Text = action
            xlbl.Color = ActionColors.GetDefault(action, xui.Color_White)
            xlbl.SetTextAlignment("CENTER", "CENTER")
            xlbl.Font = xui.CreateDefaultBoldFont(20)
            xlbl.TextColor = xui.Color_Black
            'Dim width As Int = ActionsPanel.Width / actions.Size   'kim
            'Dim width As Int = Max(40dip, cvs.MeasureText(action, xlbl.Font).Width + 20dip)   'original
            ActionsPanel.AddView(xlbl, ActionsPanel.Width - width - LastX, 0, width, ActionsPanel.Height)
        Else If action Is SwipeImage Then
            Dim SI As SwipeImage = action
            Dim Img As Panel
            Img.Tag = SI.RetVal
            Dim ximg As B4XView = Img, CV As Canvas, R As Rect
            R.Initialize(0, 0, width, ActionsPanel.Height)
            ActionsPanel.AddView(ximg, ActionsPanel.Width - width - LastX, 0, width, ActionsPanel.Height)
            CV.DrawBitmap(SI.Bmp, Null, R)
        End If
        LastX = LastX + width
    Return LastX
End Sub

Private Sub Img_Click
    Dim Img As B4XView = Sender
    Dim index As Int = LastSwipedItem
    CallSub3(mCallback, mEventName & "_ActionClicked", index, Img.Tag)
End Sub

New Code in main for the demo
Sub CreateItems
    Dim cs As CSBuilder
    For i = 1 To 100
        cs.Initialize.Color(Rnd(0xff000000, -1))
        If i Mod 3 = 0 Then
            'Dim trash As B4XBitmap = xui.LoadBitmapResize(File.DirAssets, "Trash.jpg", 5, 5, True)
            Dim trash As SwipeImage
            trash.Bmp.Initialize(File.DirAssets, "Trash.jpg")
            trash.RetVal = "Trash"
            ' = xui.LoadBitmapResize(File.DirAssets, "Trash.jpg", 5, 5, True)
            cs.Append($"Important item ${i} ..."$).PopAll
            CustomListView1.AddTextItem(cs, Swipe.CreateItemValue("", Array("Delete", "Do Something Else", trash)))
        Else If i Mod 3 = 1 Then
            cs.Append($"Very important item ${i} ..."$).PopAll
            CustomListView1.AddTextItem(cs, Swipe.CreateItemValue("", Array("Action 1", "Action 2", "Action 3", "Action 4", "Action 5")))
            cs.Append($"Nothing to see here ${i}"$).PopAll
            CustomListView1.AddTextItem(cs, Null)
        End If
End Sub

Swipe_ActionClicked event in main needs
Or (ActionText = "Trash")
added to have the image work

Sub Swipe_ActionClicked (Index As Int, ActionText As String)
    Log($"Action clicked: ${Index}, ${ActionText}"$)
    If (ActionText = "Delete") Or (ActionText = "Trash") Then
    Else If ActionText = "Do Something Else" Then
        Dim p As B4XView = CustomListView1.GetPanel(Index)
        Dim lbl As B4XView = p.GetView(0)
        lbl.Text = "Done!!!"
    End If
End Sub


  • upload_2019-8-21_0-45-53.png
    32 KB · Views: 192
  • upload_2019-8-21_0-46-44.png
    32.2 KB · Views: 189
Last edited:


Well-Known Member
Licensed User
Longtime User
I just made mods to the
CreateActionButtons section - it was wrong.