'-----------------------------
' with animation
'-----------------------------
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private CLV1 As CustomListView
Private BlurPanel As Panel
Private BlurRadiusStrong As Float = 25dip
Private BlurRadiusWeak As Float = 0dip
Private BlurTimer As Timer ' detects end of scroll
Private AnimTimer As Timer ' animates the blur
Private AnimStart As Float
Private AnimEnd As Float
Private AnimStartAlpha As Int
Private AnimEndAlpha As Int
Private AnimStartTime As Long
Private AnimDuration As Int = 200 ' animation duration
Private CurrentBlur As Float = 0
Private CurrentAlpha As Int = 0
End Sub
Public Sub Initialize
' B4XPages.GetManager.LogEvents = True
End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
For i = 1 To 50
CLV1.AddTextItem("Élément " & i, "")
Next
BlurPanel.Color = Colors.ARGB(0, 0, 0, 0)
ApplyBlur(BlurPanel, 0)
BlurTimer.Initialize("BlurTimer", 120)
AnimTimer.Initialize("AnimTimer", 16) ' ~60 FPS
End Sub
Sub ApplyBlur(v As View, radius As Float)
Dim jo As JavaObject = Me
jo.RunMethod("BlurEffect", Array(v, radius))
End Sub
Sub AnimateBlurAndAlpha(TargetRadius As Float, TargetAlpha As Int)
AnimStart = CurrentBlur
AnimEnd = TargetRadius
AnimStartAlpha = CurrentAlpha
AnimEndAlpha = TargetAlpha
AnimStartTime = DateTime.Now
AnimTimer.Enabled = True
End Sub
Sub AnimTimer_Tick
Dim elapsed As Long = DateTime.Now - AnimStartTime
Dim t As Float = elapsed / AnimDuration
If t >= 1 Then
t = 1
AnimTimer.Enabled = False
End If
' Blur interpolation
CurrentBlur = AnimStart + (AnimEnd - AnimStart) * t
ApplyBlur(BlurPanel, CurrentBlur)
' opacity Interpolation
CurrentAlpha = AnimStartAlpha + (AnimEndAlpha - AnimStartAlpha) * t
BlurPanel.Color = Colors.ARGB(CurrentAlpha, 255, 255, 255)
End Sub
Sub CLV1_ScrollChanged(Offset As Int)
AnimateBlurAndAlpha(BlurRadiusStrong, 180)
BlurTimer.Enabled = False
BlurTimer.Enabled = True
End Sub
Sub BlurTimer_Tick
BlurTimer.Enabled = False
AnimateBlurAndAlpha(BlurRadiusWeak, 0)
End Sub