Hi
I want to create my own simple Xamaran.Forms SkiaSharp example based on https://github.com/mono/SkiaSharp/tree/master/samples (which works)
PCL Main Page :
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestSkia"
x:Class="TestSkia.MainPage">
<Grid>
<local:SkiaView x:Name="SkiaView"></local:SkiaView>
</Grid>
</ContentPage>
PCL Skia View
namespace TestSkia
{
public class SkiaView : View
{
}
}
The Android SkiaView and the SkiaViewRenderer
using System;
using Android.Views;
using Android.Graphics;
using SkiaSharp;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(TestSkia.SkiaView), typeof(TestSkia.Droid.SkiaViewRenderer))]
namespace TestSkia.Droid
{
public class SikaView : Android.Views.View
{
readonly SkiaView skiaView;
private Bitmap bitmap;
public SikaView(Android.Content.Context context, SkiaView skiaView) : base(context)
{
this.skiaView = skiaView;
}
protected override void OnDraw(Android.Graphics.Canvas canvas)
{
base.OnDraw(canvas);
if (bitmap == null || bitmap.Width != canvas.Width || bitmap.Height != canvas.Height)
{
if (bitmap != null)
bitmap.Dispose();
bitmap = Bitmap.CreateBitmap(canvas.Width, canvas.Height, Bitmap.Config.Argb8888);
}
try
{
using (var surface = SKSurface.Create(canvas.Width, canvas.Height, SKImageInfo.PlatformColorType, SKAlphaType.Premul, bitmap.LockPixels(), canvas.Width * 4))
{
var skcanvas = surface.Canvas;
skcanvas.Scale(((float)canvas.Width) / (float)skiaView.Width, ((float)canvas.Height) / (float)skiaView.Height);
skcanvas.DrawCircle(100, 100, 100, new SKPaint() { Color = new SKColor(155, 155, 155) });
}
}
finally
{
// bitmap.UnlockPixels();
}
}
}
public class SkiaViewRenderer : ViewRenderer<SkiaView, TestSkia.Droid.SikaView>
{
protected override void OnElementChanged(ElementChangedEventArgs<SkiaView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var view = new TestSkia.Droid.SikaView(Context, Element);
SetNativeControl(view);
}
}
}
}
SKSurface.Create returns always null, What I'am doing wrong ?
Thanks Wolfgang