Solved!
Hello everybody
This error occurs only on Xiaomi MI 9 (MIUI Global 10.2.28; Android 9)
Everything is fine with Ulefone Power 5 (Android: 8.1.0) and Nexus 5 ( Android 6.0.1).
What am I doing wrong?
Thank you
Code Modul AnimatedCounter error at Private Sub TopFromValue (Digit As Int) As Int
my Code
Hello everybody
This error occurs only on Xiaomi MI 9 (MIUI Global 10.2.28; Android 9)
Everything is fine with Ulefone Power 5 (Android: 8.1.0) and Nexus 5 ( Android 6.0.1).
What am I doing wrong?
Thank you
B4X:
Logger verbunden mit: Xiaomi MI 9
....
** Activity (counter) Create, isFirst = true **
animatedcounter_setvalue (java line: 312)
java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
at android.view.View.sanitizeFloatPropertyValue(View.java:15446)
at android.view.View.sanitizeFloatPropertyValue(View.java:15420)
at android.view.View.setScaleX(View.java:14809)
at android.animation.PropertyValuesHolder.nCallFloatMethod(Native Method)
at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38)
at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1387)
at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990)
at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:674)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:637)
at android.animation.ValueAnimator.start(ValueAnimator.java:1069)
at android.animation.ValueAnimator.start(ValueAnimator.java:1088)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)
at android.animation.ValueAnimator.startWithoutPulsing(ValueAnimator.java:1081)
at android.animation.AnimatorSet.handleAnimationEvents(AnimatorSet.java:1142)
at android.animation.AnimatorSet.startAnimation(AnimatorSet.java:1227)
at android.animation.AnimatorSet.start(AnimatorSet.java:729)
at android.animation.AnimatorSet.start(AnimatorSet.java:684)
at anywheresoftware.b4a.objects.B4XViewWrapper.SetLayoutAnimated(B4XViewWrapper.java:158)
at de.watchkido.redemeister.animatedcounter._setvalue(animatedcounter.java:312)
at de.watchkido.redemeister.animatedcounter._designercreateview(animatedcounter.java:246)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:196)
at anywheresoftware.b4a.objects.CustomViewWrapper.AfterDesignerScript(CustomViewWrapper.java:67)
at anywheresoftware.b4a.keywords.LayoutBuilder.loadLayout(LayoutBuilder.java:162)
at anywheresoftware.b4a.objects.ActivityWrapper.LoadLayout(ActivityWrapper.java:209)
at de.watchkido.redemeister.counter._activity_create(counter.java:375)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:196)
at de.watchkido.redemeister.counter.afterFirstLayout(counter.java:104)
at de.watchkido.redemeister.counter.access$000(counter.java:17)
at de.watchkido.redemeister.counter$WaitForLayout.run(counter.java:82)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6815)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Application_Error
(IllegalArgumentException) java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
at android.view.View.sanitizeFloatPropertyValue(View.java:15446)
at android.view.View.sanitizeFloatPropertyValue(View.java:15420)
at android.view.View.setScaleX(View.java:14809)
at android.animation.PropertyValuesHolder.nCallFloatMethod(Native Method)
at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38)
at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1387)
at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990)
at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:674)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:637)
at android.animation.ValueAnimator.start(ValueAnimator.java:1069)
at android.animation.ValueAnimator.start(ValueAnimator.java:1088)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)
at android.animation.ValueAnimator.startWithoutPulsing(ValueAnimator.java:1081)
at android.animation.AnimatorSet.handleAnimationEvents(AnimatorSet.java:1142)
at android.animation.AnimatorSet.startAnimation(AnimatorSet.java:1227)
at android.animation.AnimatorSet.start(AnimatorSet.java:729)
at android.animation.AnimatorSet.start(AnimatorSet.java:684)
at anywheresoftware.b4a.objects.B4XViewWrapper.SetLayoutAnimated(B4XViewWrapper.java:158)
at de.watchkido.redemeister.animatedcounter._setvalue(animatedcounter.java:312)
at de.watchkido.redemeister.animatedcounter._designercreateview(animatedcounter.java:246)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:196)
at anywheresoftware.b4a.objects.CustomViewWrapper.AfterDesignerScript(CustomViewWrapper.java:67)
at anywheresoftware.b4a.keywords.LayoutBuilder.loadLayout(LayoutBuilder.java:162)
at anywheresoftware.b4a.objects.ActivityWrapper.LoadLayout(ActivityWrapper.java:209)
at de.watchkido.redemeister.counter._activity_create(counter.java:375)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:196)
at de.watchkido.redemeister.counter.afterFirstLayout(counter.java:104)
at de.watchkido.redemeister.counter.access$000(counter.java:17)
at de.watchkido.redemeister.counter$WaitForLayout.run(counter.java:82)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6815)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Copying updated assets files (145)
*** Service (starter) Create ***
Using FileProvider? true
/storage/emulated/0/1-Redemeister/Video/
defileprovider
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
Firsttime:++++++++++++++++++++++++true
Firsttime1:++++++++++++++++++++++++False
Firsttime1:++++++++++++++++++++++++False
false
true
true
true
** Activity (main) Pause, UserClosed = false **
** Activity (counter) Create, isFirst = true **
0
0
0
Error occurred on line: 89 (AnimatedCounter)
java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
at android.view.View.sanitizeFloatPropertyValue(View.java:15446)
at android.view.View.sanitizeFloatPropertyValue(View.java:15420)
at android.view.View.setScaleX(View.java:14809)
at android.animation.PropertyValuesHolder.nCallFloatMethod(Native Method)
at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38)
at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1387)
at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990)
at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:674)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:637)
at android.animation.ValueAnimator.start(ValueAnimator.java:1069)
at android.animation.ValueAnimator.start(ValueAnimator.java:1088)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)
at android.animation.ValueAnimator.startWithoutPulsing(ValueAnimator.java:1081)
at android.animation.AnimatorSet.handleAnimationEvents(AnimatorSet.java:1142)
at android.animation.AnimatorSet.startAnimation(AnimatorSet.java:1227)
at android.animation.AnimatorSet.start(AnimatorSet.java:729)
at android.animation.AnimatorSet.start(AnimatorSet.java:684)
at anywheresoftware.b4a.objects.B4XViewWrapper.SetLayoutAnimated(B4XViewWrapper.java:158)
at de.watchkido.redemeister.animatedcounter._setvalue(animatedcounter.java:99)
at de.watchkido.redemeister.animatedcounter._designercreateview(animatedcounter.java:407)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:180)
at anywheresoftware.b4a.objects.CustomViewWrapper.AfterDesignerScript(CustomViewWrapper.java:61)
at anywheresoftware.b4a.keywords.LayoutBuilder.loadLayout(LayoutBuilder.java:162)
at anywheresoftware.b4a.objects.ActivityWrapper.LoadLayout(ActivityWrapper.java:209)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at de.watchkido.redemeister.counter.afterFirstLayout(counter.java:104)
at de.watchkido.redemeister.counter.access$000(counter.java:17)
at de.watchkido.redemeister.counter$WaitForLayout.run(counter.java:82)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6815)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Code Modul AnimatedCounter error at Private Sub TopFromValue (Digit As Int) As Int
B4X:
'version 1.10
#DesignerProperty: Key: Digits, DisplayName: Number Of Digits, FieldType: Int, DefaultValue: 4, Description: Number of digits
#DesignerProperty: Key: Duration, DisplayName: Animation Duration, FieldType: Int, DefaultValue: 1000, Description:
Sub Class_Globals
Private mEventName As String 'ignore
Private mCallBack As Object 'ignore
Private mBase As B4XView 'ignore
Private xui As XUI 'ignore
Private ImageViews As List
Private mdigits As Int
Private lblTemplate As B4XView
Private mValue As List
Private DigitHeight, DigitWidth As Int
Private mDuration As Int
Private fade As B4XBitmap
Private xfadeIv As B4XView
End Sub
Public Sub Initialize (Callback As Object, EventName As String)
mEventName = EventName
mCallBack = Callback
ImageViews.Initialize
mValue.Initialize
End Sub
'Base type must be Object
Public Sub DesignerCreateView (Base As Object, lbl As Label, Props As Map)
mBase = Base
Dim pnl As B4XView = xui.CreatePanel("") 'needed as the passed pane in B4J doesn't crop the child views
mBase.AddView(pnl, 0, 0, 0, 0)
mdigits = Props.Get("Digits")
mDuration = Props.Get("Duration")
lblTemplate = lbl
fade = CreateFadeBitmap
For i = 0 To mdigits - 1
Dim iv As ImageView
iv.Initialize("")
ImageViews.Add(iv)
mBase.GetView(0).AddView(iv, 0, 0, 0, 0)
Next
Dim fadeIv As ImageView
fadeIv.Initialize("")
xfadeIv = fadeIv
mBase.GetView(0).AddView(fadeIv, 0, 0, 0, 0)
setValue(0)
If xui.IsB4A Then
Base_Resize(mBase.Width, mBase.Height)
setValue(getValue)
End If
End Sub
Private Sub CreateFadeBitmap As B4XBitmap
Dim bc As BitmapCreator
bc.Initialize(200, 50)
Dim r As B4XRect
r.Initialize(0, 0, bc.mWidth, bc.mHeight / 3)
bc.FillGradient(Array As Int(xui.Color_White, 0x00ffffff), r, "TOP_BOTTOM")
r.Top = bc.mHeight * 2 / 3
r.Bottom = bc.mHeight
bc.FillGradient(Array As Int(xui.Color_White, 0x00ffffff), r, "BOTTOM_TOP")
Return bc.Bitmap
End Sub
Private Sub Base_Resize (Width As Double, Height As Double)
mBase.GetView(0).SetLayoutAnimated(0, 0, 0, Width, Height)
xfadeIv.SetLayoutAnimated(0, 0, 0, Width, Height)
xfadeIv.SetBitmap(fade.Resize(Width, Height, False))
DigitHeight = Height
Dim Columns As Int = mdigits
DigitWidth = Width / Columns
Dim bmp As B4XBitmap = CreateBitmap(lblTemplate)
Dim left As Int = Width
For i = 0 To ImageViews.Size - 1
Dim iv As B4XView = ImageViews.Get(i)
'from right to left
left = left - DigitWidth
iv.SetLayoutAnimated(0, left, TopFromValue(i), DigitWidth, DigitHeight * 10)
iv.SetBitmap(bmp)
Next
End Sub
Private Sub TopFromValue (Digit As Int) As Int
Log(Digit) 'all 3 smartphones log "0" here
Log(DigitHeight) 'all 3 smartphones log "0" here
Dim d As Int = mValue.Get(Digit)
Log(mValue.Get(Digit)) 'all 3 smartphones log "0" here
Return -d * DigitHeight 'Only the Xiaomi MI9 crashes here
End Sub
Private Sub CreateBitmap (lbl As B4XView) As B4XBitmap
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0, 0, 0, DigitWidth, DigitHeight * 10)
Dim cvs As B4XCanvas
cvs.Initialize(p)
Dim voffset As Float = 0.7
For i = 0 To 9
cvs.DrawText(i, DigitWidth / 2, (i + voffset) * DigitHeight, lbl.Font, lbl.TextColor, "CENTER")
Next
cvs.Invalidate
Dim res As B4XBitmap = cvs.CreateBitmap
cvs.Release
Return res
End Sub
Public Sub setValue(v As Int)
mValue.Clear
For i = 0 To mdigits - 1
mValue.Add(v Mod 10)
v = v / 10
Dim iv As B4XView = ImageViews.Get(i)
iv.SetLayoutAnimated(mDuration, iv.Left, TopFromValue(i), iv.Width, iv.Height)
Next
End Sub
Public Sub getValue As Int
Dim res As Int
For i = 0 To mValue.Size - 1
res = res + mValue.Get(i) * Power(10, i)
Next
Return res
End Sub
my Code
B4X:
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
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.
Dim AnimatedCounter1 As AnimatedCounter
Private Button1 As Button
Dim v As Int = 0
Private Button2 As Button
Private Button3 As Button
Dim Beeper1 As Beeper
Private ToggleButton1 As ToggleButton
Private ton As Boolean = False
Private EditText1 As EditText
Public p As Phone
Dim Clrs(2) As Int
Dim Gradient1 As GradientDrawable
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("Count")
Activity.Title = "Füllwortzähler"
EditText1.Text = File.ReadString(Main.PadDir, "1counter.txt")
EditText1.TextSize = 20
Button1.Text = "Zählen"
Button2.Text = "Zurück"
Button3.Text = "Reset"
Beeper1.Initialize(100, 800)
Activity.Title = Main.AppName
Activity.AddMenuItem("Einstellungen","Hilfe")
Activity.AddMenuItem("Hilfe","Hilfe")
Activity.AddMenuItem("Feedback an Entwickler senden","Hilfe")
Clrs(0) = Main.Farbe1
Clrs(1) = Main.Farbe2
Gradient1.Initialize("TOP_BOTTOM", Clrs)
Activity.Background = Gradient1
End Sub
Sub Activity_Resume
Main.Phone1.KeepAlive(True)
End Sub
Sub Activity_Pause (UserClosed As Boolean)
Main.Phone1.ReleaseKeepAlive
End Sub
Sub Button1_Click
'Log(AnimatedCounter1.Value)
v = v+1
AnimatedCounter1.Value = v
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
If ton Then Beeper1.Beep
End Sub
Sub Button2_Click
'Log(AnimatedCounter1.Value)
If v>0 Then
v = v-1
Else
v = 0
End If
AnimatedCounter1.Value = v
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
End Sub
Sub ToggleButton1_CheckedChange(Checked As Boolean)
ton = Checked
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
End Sub
Sub Label1_Click
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
End Sub
Sub Button3_Click
'Log(AnimatedCounter1.Value)
v = 0
AnimatedCounter1.Value = v
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
End Sub
Sub Activity_KeyPress (KeyCode As Int) 'return true if you want to consume the event
If KeyCode = KeyCodes.KEYCODE_BACK Then
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
Sleep(100)
Activity.Finish
Else
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
Sleep(100)
End If
End Sub
Sub Button4_Click
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
End Sub
Sub EditText1_EnterPressed
p.HideKeyboard(Activity)
File.WriteString(Main.paddir,"1counter.txt",EditText1.Text)
Sleep(100)
End Sub
Sub Hilfe_click
Dim N As String = Sender
Frank.Hilfe(N)
End Sub
Last edited: