Xamarin.Forms でプラットフォーム固有の機能を実装する(カスタムレンダラー編)
Xamarin.Formsでは各プラットフォーム固有の機能を使用する方法として、主に2つの方法があります。
- カスタムレンダラー
- DependencyService
カスタムレンダラーは、Xamarin.Formsの既存のビューを拡張する場合などに使用します。
ここでは、Xamarin.FormsのImage
の色を変更する方法をカスタムレンダラーで実装します。
サンプルはこちら
手順
- 共通プロジェクトにカスタム元のビューを用意する
- 各プラットフォームにカスタム用のカスタムレンダラーを用意する
- 共通プロジェクトにカスタマイズ用のパラメータを追加する
- 各プラットフォームのカスタムレンダラーにカスタム内容を記述する
共通プロジェクトにカスタム元のビューを用意する
Xamarin.FormsでImageをカスタマイズする(共通プロジェクト)
カスタムレンダラーを使用するにはまず、共通プロジェクトに、Xamarin.Formsのビューを継承したビューを用意します。
(以下、このビューをForms側ビューと呼びます。)
今回はImage
を継承したCustomImage
を用意しました。
各プラットフォームにカスタム用のカスタムレンダラーを用意する
- Forms側ビューのレンダラーに対応した、各プラットフォームのレンダラーを継承したカスタムレンダラークラスを作成する
ExportRenderer
属性を使用して、Forms側ビューのレンダラーを↑で作成したカスタムレンダラーに変更する
Xamarin.FormsでImageをカスタマイズする(カスタムレンダラー、Android)
この段階でビルドすると、まだ何もカスタマイズしていないので、設定した画像がそのまま表示されます。
共通プロジェクトにカスタマイズ用のパラメータを追加する
Xamarin.FormsでImageをカスタマイズする(共通プロジェクト)
画像の色を変更するためのImageColor
というプロパティを用意しました。
各プラットフォームのカスタムレンダラーにカスタム内容を記述する
カスタムレンダラーでは主に2つの関数をOverrideして使用します。
OnElementChanged
: 初期化時の処理を実装OnElementPropertyChanged
: プロパティ値が変化する都度の処理を実装
Xamarin.FormsでImageをカスタマイズする(カスタムレンダラー、Android)
Xamarin.FormsでImageをカスタマイズする(カスタムレンダラー、iOS)
ここでは、
Androidでは、OnElementChanged
で画像の色を変更する処理をしています。
iOSでは、OnElementPropertyChanged
で画像の色を変更する処理をしています。
iOSではOnElementChanged
の段階では、image
の準備が完了していないためです。
以上で、カスラムレンダラーを使用して、Xamarin.FormsのImage
のカラーが変更できるようになりました。