'ScaleDown is a global float variable that is set with: ScaleDown = xui.Scale
Sub CustomListView1_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int)
Dim ExtraSize As Int = 2
For i = 0 To CustomListView1.Size - 1
Dim p As B4XView = CustomListView1.GetPanel(i)
Dim iv As ImageView
Dim id As ImageData = CustomListView1.GetValue(i)
If i >= Max(0, FirstIndex - ExtraSize) And i <= Min(LastIndex + ExtraSize, CustomListView1.Size - 1) Then
If p.NumberOfViews = 0 Then
iv.Initialize("")
iv.Gravity = Gravity.FILL
p.AddView(iv, 0, 0, CustomListView1.AsView.Width,CustomListView1.AsView.Height)
Else
iv = p.GetView(0)
End If
If id.Bitmap.IsInitialized = False Then
id.Bitmap = xui.LoadBitmapResize(AppDir, id.FileName, iv.Width / ScaleDown, iv.Height / ScaleDown, True)
End If
SetImageAndCenter(iv, id.Bitmap)
Else
If p.NumberOfViews = 0 Then Continue
iv = p.GetView(0)
iv.Bitmap = Null
If id.Bitmap.IsInitialized Then
id.Bitmap = Null
End If
End If
Next
End Sub
Sub SetImageAndCenter (iv As ImageView, bmp As B4XBitmap)
Dim Parent As B4XView = iv.Parent
iv.SetLayoutAnimated(0, Parent.Width / 2 - bmp.Width * ScaleDown / 2, Parent.Height / 2 - bmp.Height * ScaleDown / 2, _
bmp.Width * ScaleDown, bmp.Height * ScaleDown)
iv.Bitmap = bmp
End Sub