Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OnDraw:画布未绘制位图_C#_Android_Xamarin_Android Canvas_Android Custom View - Fatal编程技术网

C# OnDraw:画布未绘制位图

C# OnDraw:画布未绘制位图,c#,android,xamarin,android-canvas,android-custom-view,C#,Android,Xamarin,Android Canvas,Android Custom View,我正在使用Xamarin.Android创建一个自定义视图,我想在画布上画一个圆圈,然后在上面画一个位图。圆圈绘制正确,但位图绘制不正确 位图对应于png图像资源。 这是我的OnDraw protected async override void OnDraw(Canvas canvas) { base.OnDraw(canvas); Paint buttonBackgroundPaint = new Paint(PaintFlags.AntiAl

我正在使用Xamarin.Android创建一个自定义视图,我想在画布上画一个圆圈,然后在上面画一个位图。圆圈绘制正确,但位图绘制不正确 位图对应于png图像资源。 这是我的
OnDraw

    protected async override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);
        Paint buttonBackgroundPaint = new Paint(PaintFlags.AntiAlias);
        Color? c = null;
        bool colorOk = Resources.TryGetColor(_backgroundColor, out c);

        buttonBackgroundPaint.Color = (Color)(colorOk ? c : _context?.Resources.GetColor(AndroidRes.Resource.Color.Black));
        canvas.DrawCircle(Width / 2, Height / 2, _radius, buttonBackgroundPaint);

        Paint bitmapPaint = new Paint(PaintFlags.AntiAlias);
        Bitmap bitmapContent = await BitmapFactory.DecodeResourceAsync(_context?.Resources, _drawableContent);
        canvas.DrawBitmap(bitmapContent, 0, 0, bitmapPaint);

    }

编辑:Resources.TryGetColor是我创建的一个扩展方法。

我注意到旋转屏幕时会显示位图的一部分。 问题在于位图边界,因此我按如下方式解决:

protected async override void OnDraw(Canvas canvas)
{
    base.OnDraw(canvas);
    Paint buttonBackgroundPaint = new Paint(PaintFlags.AntiAlias);
    Color? c = null;
    bool colorOk = Resources.TryGetColor(_backgroundColor, out c);

    buttonBackgroundPaint.Color = (Color)(colorOk ? c : _context?.Resources.GetColor(AndroidRes.Resource.Color.Black));
    canvas.DrawCircle(Width / 2, Height / 2, _radius, buttonBackgroundPaint);

    Drawable dr = _context.Resources.GetDrawable(Resource.Drawable.image);
    dr.SetBounds(0, 0, right, bottom); // appropiate values for my case
    dr.Draw(canvas);
}