Private Sub DrawTextWithStroke(text As String,x As Float,y As Float,f As B4XFont,color As Int,strokeColor As Int,alignment As Object,stroke As Float)
Dim B4XCVSWrapper As JavaObject = cvs
Dim cvsWrapper As JavaObject = B4XCVSWrapper.GetField("cvs")
Dim nativeCVS As JavaObject = cvsWrapper.GetField("canvas")
'Dim nativePaint As JavaObject = cvsWrapper.GetField("paint")
cvsWrapper.RunMethod("checkAndSetTransparent",Array(color))
Dim ctx As JavaObject
ctx.InitializeContext
Dim scale As Float = ctx.RunMethodJO("getResources",Null).RunMethodJO("getDisplayMetrics",Null).GetField("scaledDensity")
Dim size As Float = f.Size * scale
Dim Style As EnumClass
Style.Initialize("android.graphics.Paint.Style")
Dim fillPaint As JavaObject
fillPaint.InitializeNewInstance("android.graphics.Paint", Null)
fillPaint.RunMethod("setAntiAlias", Array(True))
fillPaint.RunMethod("setTextAlign", Array(alignment))
fillPaint.RunMethod("setTextSize", Array(size))
fillPaint.RunMethod("setTypeface", Array(f.ToNativeFont))
fillPaint.RunMethod("setColor", Array(color))
fillPaint.RunMethod("setStyle", Array(Style.ValueOf("FILL")))
'Dim aa As Boolean = nativePaint.RunMethod("isAntiAlias",Null)
Dim strokePaint As JavaObject
strokePaint.InitializeNewInstance("android.graphics.Paint", Null)
strokePaint.RunMethod("setAntiAlias", Array(True))
strokePaint.RunMethod("setTextAlign", Array(alignment))
strokePaint.RunMethod("setTextSize", Array(size))
strokePaint.RunMethod("setTypeface", Array(f.ToNativeFont))
strokePaint.RunMethod("setColor", Array(strokeColor))
strokePaint.RunMethod("setStrokeWidth", Array(stroke))
strokePaint.RunMethod("setStyle", Array(Style.ValueOf("STROKE")))
nativeCVS.RunMethod("drawText", Array(text, x, y, strokePaint))
nativeCVS.RunMethod("drawText", Array(text, x, y, fillPaint))
'nativePaint.RunMethod("setAntiAlias",Array(aa))
End Sub