Android Question Simple Halo Animation Consumes Touch Event

Jack Cole

Well-Known Member
Licensed User
Longtime User
I am trying to use the Simple Halo Animation example to create a ripple like effect for button clicks. I have some complex content, so I overlay a panel over the content to catch the touch and produce the halo effect. The problem is that I can't see to have both the halo effect and catch the click event. I return False in the touch event. I show the code below and attached a sample project. Anyone know what the problem might be?

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Private xui As XUI
    Private Button1 As Button
    Private Panel1 As Panel
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    Dim btn As Button
    btn.Initialize("btn")
    btn.TextColor = Colors.White
    btn.Text = "Styled button"
    Activity.AddView(btn, 0, 0, 50%x, 10%y)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub CreateHaloEffect (Parent As B4XView, x As Int, y As Int, clr As Int)
    Dim cvs As B4XCanvas
    Dim p As B4XView = xui.CreatePanel("")
    Dim radius As Int = 150dip
    p.SetLayoutAnimated(0, 0, 0, radius * 2, radius * 2)
    cvs.Initialize(p)
    cvs.DrawCircle(cvs.TargetRect.CenterX, cvs.TargetRect.CenterY, cvs.TargetRect.Width / 2, clr, True, 0)
    Dim bmp As B4XBitmap = cvs.CreateBitmap
'    For i = 1 To 5
        CreateHaloEffectHelper(Parent,bmp, x, y, clr, radius)
'        Sleep(800)
'    Next
End Sub

Sub CreateHaloEffectHelper (Parent As B4XView,bmp As B4XBitmap, x As Int, y As Int, clr As Int, radius As Int)
    Dim iv As ImageView
    iv.Initialize("")
    Dim p As B4XView = iv
    p.SetBitmap(bmp)
    Parent.AddView(p, x, y, 0, 0)
    Dim duration As Int = 200
    p.SetLayoutAnimated(duration, x - radius, y - radius, 2 * radius, 2 * radius)
    p.SetVisibleAnimated(duration, False)
    Sleep(duration)
    p.RemoveViewFromParent
End Sub
Sub Activity_Touch (Action As Int, X As Float, Y As Float)
    If Action = Activity.ACTION_DOWN Then
        CreateHaloEffect(Activity, X, Y, xui.Color_Blue)
    End If
End Sub


Sub Panel1_Touch (Action As Int, X As Float, Y As Float)
    If Action=Activity.ACTION_UP Then CreateHaloEffect(Panel1, X, Y, xui.Color_ARGB(100,255,255,255))
    Return False
End Sub

Sub Panel1_Click
    Log("Panel1_Click")
End Sub
 

Attachments

  • test.zip
    15 KB · Views: 345

Erel

B4X founder
Staff member
Licensed User
Longtime User
You can either handle the Touch event or the Click event.

Change your code to:
B4X:
Sub Panel1_Touch (Action As Int, X As Float, Y As Float)
    If Action=Activity.ACTION_UP Then
      CreateHaloEffect(Panel1, X, Y, xui.Color_ARGB(100,255,255,255))
      Panel1_Click
   End If
End Sub

Sub Panel1_Click
    Log("Panel1_Click")
End Sub
 
Upvote 0
Top