c# - 画图 : Canvas is not drawing bitmap

标签 c# android xamarin android-canvas android-custom-view

我正在使用 Xamarin.Android 制作自定义 View ,我想在 Canvas 上绘制一个圆然后在其上绘制一个位图。圆正在正确绘制,但位图不是 位图对应一个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);
}

关于c# - 画图 : Canvas is not drawing bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799426/

相关文章:

visual-studio - Visual Studio 2015 中的警告 : Creating Cross-plaftorm Xamarin Blank App (Xamarin. 表单可移植)

c# - 使用 Microsoft.AspNetCore.Authentication.AzureADB2C.UI 时如何覆盖/替换错误页面处理?

c# - 在 Xamarin Forms UWP 中突出显示选定的选项卡

c# - 在 Fluent NHibernate 中将 URI 映射到字符串

android - Android 手机在横向模式下的设备宽度?

android - 如何从 Firebase 下载 HTML 文件并加载到 webview 中?

c# - 如何保护手游的时效存档

android - 如何在 android 中创建带有节标题的可扩展 ListView

xaml - 如何将命令绑定(bind)到 Xamarin 表单中的条目 "Unfocused"事件

ios - Xamarin 使用 CloudKit 开发的应用程序仍然是跨平台的?