Hallo zusammen,
ich nutze das ScrollView2D, auf dessen Panel ein Layout geladen wird. Dieses soll nun zoombar sein. Eigentlich mit der typischen Fingergeste, aber selbst mit dem GestureDetector hab ich das nicht hin bekommen. Nun also mit 2 Buttons (cmdZoomIn & cmdZoomOut). Bei Click wird ein ScaleView ausgelöst, dass das ganze ScrollView per Schleife nach und nach vergrößert, gewissermaßen zoomt. Leider ist dann jedoch das horizontale Scrollen nur fehlerhaft möglich, weil ich z.B. gar nicht nach ganz links gelange, obwohl ich die Width des ScrollView-Panels angepasst habe. Was mache ich falsch?
ich nutze das ScrollView2D, auf dessen Panel ein Layout geladen wird. Dieses soll nun zoombar sein. Eigentlich mit der typischen Fingergeste, aber selbst mit dem GestureDetector hab ich das nicht hin bekommen. Nun also mit 2 Buttons (cmdZoomIn & cmdZoomOut). Bei Click wird ein ScaleView ausgelöst, dass das ganze ScrollView per Schleife nach und nach vergrößert, gewissermaßen zoomt. Leider ist dann jedoch das horizontale Scrollen nur fehlerhaft möglich, weil ich z.B. gar nicht nach ganz links gelange, obwohl ich die Width des ScrollView-Panels angepasst habe. Was mache ich falsch?
B4X:
scvMainScroll.Initialize(100%x, 2000dip, "scvMainScroll")
Activity.AddView(scvMainScroll, 0, 0, 100%x, 100%y)
scvMainScroll.Panel.LoadLayout("main")
B4X:
Private Sub cmdZoomIn_Click
scvMainScroll.Panel.Width = Activity.Width * (mfltLastMainScrollScale + 1.0)
ScaleView(scvMainScroll, mfltLastMainScrollScale + 1.0)
End Sub
Private Sub cmdZoomOut_Click
scvMainScroll.Panel.Width = Activity.Width * (mfltLastMainScrollScale - 1.0)
ScaleView(scvMainScroll, mfltLastMainScrollScale - 1.0)
End Sub
B4X:
Sub ScaleView(v As View, Scale As Float)
If mblnScalingInProgress Then Return
If Scale >= 1.0 Then
mblnScalingInProgress = True
Dim jo As JavaObject = v
Do Until mfltLastMainScrollScale = Scale
Sleep(0)
If Scale > mfltLastMainScrollScale Then
Dim NewScale As Float = mfltLastMainScrollScale + 0.1
If NewScale >= Scale Then
jo.RunMethod("setScaleX", Array(Scale))
jo.RunMethod("setScaleY", Array(Scale))
mfltLastMainScrollScale = Scale
Exit
End If
jo.RunMethod("setScaleX", Array(NewScale))
jo.RunMethod("setScaleY", Array(NewScale))
mfltLastMainScrollScale = NewScale
Else If Scale < mfltLastMainScrollScale Then
Dim NewScale As Float = mfltLastMainScrollScale - 0.1
If NewScale <= Scale Then
jo.RunMethod("setScaleX", Array(Scale))
jo.RunMethod("setScaleY", Array(Scale))
mfltLastMainScrollScale = Scale
Exit
End If
jo.RunMethod("setScaleX", Array(NewScale))
jo.RunMethod("setScaleY", Array(NewScale))
mfltLastMainScrollScale = NewScale
End If
Loop
mfltLastMainScrollScale = Scale
mblnScalingInProgress = False
End If
End Sub