Hi, masters, I have 2 modify codes here I've get through this forum as well.
First one is code in rotating image
The second one is dragging the image
And my problem is, when I combine this two codes the rotating image, doesn't now function.
Guys, I really need your help to figure out the problem.
Your help is high appreciated.
Thanks in advance.
-herryj
First one is code in rotating image
B4X:
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim bp As BitmapPlus
Dim bmp, bmpPressed As Bitmap
Dim ivRotatKnob As ImageView
Dim MinAngle As Int
MinAngle = -360
Dim MaxAngle As Int
MaxAngle = 360
Dim Angle, OldAngle As Int
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Activity.Color = Colors.Blue
bmp = LoadBitmap(File.DirAssets, "cat.png")
bmpPressed = LoadBitmap(File.DirAssets, "cat.png")
ivRotatKnob.Initialize("")
ivRotatKnob.Gravity = Gravity.NO_GRAVITY
Activity.AddView(ivRotatKnob, 60dip, 34dip, bmp.Width * Density, bmp.Height * Density)
Dim r As Reflector
r.Target = ivRotatKnob
r.SetOnTouchListener("Knob_Touch")
'Angle = MinAngle
ivRotatKnob.SetBackgroundImage(bp.Rotate(bmp, bmp.Width, bmp.Height, Angle, True))
End Sub
Private Sub getAngle(X As Float, Y As Float) As Float
Dim dx, dy As Float
dx = (ivRotatKnob.Width / 2) - X
dy = Y - (ivRotatKnob.Height / 2)
Return ATan2(-dx, -dy) / cPI * 180
End Sub
Sub CalcAngle(X As Float, Y As Float)
Dim NewAngle As Float
NewAngle = getAngle(X, Y)
Dim Delta, Delta1, Delta2, Delta3 As Float
Delta1 = NewAngle - OldAngle
Delta2 = NewAngle - OldAngle + 360
Delta3 = NewAngle - OldAngle - 360
' What's the shortest distance between the old and new angles ?
If Abs(Delta1) < Abs(Delta2) AND Abs(Delta1) < Abs(Delta3) Then
Delta = Delta1
Else If Abs(Delta2) < Abs(Delta3) Then
Delta = Delta2
Else
Delta = Delta3
End If
Angle = Max(MinAngle, Min(Angle + Delta, MaxAngle))
OldAngle = NewAngle
End Sub
Sub Knob_Touch(ViewTag As Object, Action As Int, X As Float, Y As Float, MotionEvent As Object) As Boolean
Select Action
Case 0 ' DOWN
OldAngle = getAngle(X, Y)
ivRotatKnob.SetBackgroundImage(bp.Rotate(bmpPressed, bmpPressed.Width, bmpPressed.Height, Angle, True))
Case 1 ' UP
ivRotatKnob.SetBackgroundImage(bp.Rotate(bmpPressed,bmpPressed.Width, bmpPressed.Height, Angle, True))
Case 2 ' MOVE
CalcAngle(X, Y)
ivRotatKnob.SetBackgroundImage(bp.Rotate(bmpPressed, bmpPressed.Width, bmpPressed.Height, Angle, True))
End Select
Return True
End Sub
The second one is dragging the image
B4X:
Sub Panel11_Touch(ViewTag As Object, Action As Int, X As Float, Y As Float, MotionEvent As Object) As Boolean
Select Action
Case 0
StartX = X
StartY = Y
MoveInProgress = False
Case 1
If MoveInProgress Then
If Sender Is EditText Then CallSubDelayed(Me, "HideKeyboard")
MoveInProgress = False
End If
Case 2
If Abs(X - StartX) > 15 OR Abs(Y - StartY) > 15 OR MoveInProgress Then
Panel11.Left = Max(MarginStillVisible -Panel11.Width, _
Min(Panel11.Left + X - StartX, 100%x - MarginStillVisible))
Panel11.Top = Max(MarginStillVisible - Panel11.Height, _
Min(Panel11.Top + Y - StartY, 100%y - MarginStillVisible))
Activity.Invalidate
If Sender <> Panel11 Then
Dim r As Reflector
r.Target = Sender
r.runmethod2("setPressed","False","java.lang.boolean")
End If
MoveInProgress = True
Return True
End If
End Select
If Sender = Panel11 Then Return True
End Sub
And my problem is, when I combine this two codes the rotating image, doesn't now function.
Guys, I really need your help to figure out the problem.
Your help is high appreciated.
Thanks in advance.
-herryj