Comment概要Xamarin.Formsを使うとマルチプラットフォーム向けアプリのUI実装が共通化できるのだが、デフォルトではボタンやテキストボックス等、必要最低限なコントロールしか用意されていない。凝ったことをしたい場合、例えば描画処理を自分で実装しようと思ったら各プラットフォームごとに書くしかないのである。Xamarinを使うのだったら、なるべくコードは共通化したい。そこで、SkiaSharpというライブラリを使ってPCL側で描画処理を実装するようにしてみる。Studioを起動し、新しいソリューションを作成する。ここでは、ソリューション名を「HelloSkia」とした。iOS向けのプロジェクトができているので、すべてのプロジェクトに必要なパッケージを追加する。Xamarin.Formsを選ぶ。SkiaSharp.View.Formsのパッケージが追加されていればよい。実装xamlの実装HelloSkiaという名前でソリューションを作成した場合、PCLプロジェクトにHelloSkiaPage.xamlというファイルが生成されているはずである。このファイルを編集する。</ContentPage>注目するのはハイライトした部分である。xmlns:skia=”clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms”として、以降skia:という名前でSkiaSharpのクラスにアクセスできるようにする。StackLayoutに1つのSKCanvasViewを追加している。SKCanvasViewはカスタムの描画処理を実装できるViewで、Xamarin.Formsの他のViewと同じようにレイアウトに含めたりできる。このタグの中にあるPaintSurfaceというのはSKCanvasViewの描画イベントである。ここにHandle_PaintSurfaceというメソッド名を指定している。このようにすると描画が要求されたタイミングでこのメソッドが呼ばれるようになる。次にコードビハインドを実装していこう。xamlがHelloSkiaPage.xamlという名前であれば、コードビハインドのファイルはHelloSkiaPage.xaml.csという名前でHelloSkiaPage.xamlの一階層下にあるはずである。実装内容は以下のようにした。}}描画処理は先ほどのxamlで指定しておいたHandle_PaintSurfaceメソッドに書いて行く。ここでは、四角形、円、ラインといった簡単な図形を描画してみた。APIの使い方は、AndroidでonDrawを実装するときとほぼ一緒という感覚である。これを各プラットフォームのシミュレータで実行すると以下のようになる。AndroidiOSここまでで、AndroidとiOSのプロジェクト内には何らソースコードを書いていない。このようにすることで、AndroidとiOSで描画処理を共通化することができた。参考サイト・記事Xamarin.FormsとSkiaSharpを組み合わせたチュートリアル。英語だが、SkiaSharpを使う上で最小限のことがまとまっていてわかりやすい。https://blog.xamarin.com/drawing-with-skiasharp/自サイト内記事。AndroidでのViewの描画方法について。コメントをキャンセルメールアドレスが公開されることはありません。