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