カスタムウィジェットの作成

この章では、ユーザー独自のウィジェットを作成する方法と、その際に必要な機能を解説します。

UIToolkitのソースもSDKに同梱されていますので、そちらも参考にしてください。

新しいウィジェットを作成するためには、Widget クラス または Widget クラスを派生したクラスを継承する必要があります。

ウィジェットの構成

ウィジェットはいくつかの描画要素 (UIElement) から構成されています。 描画要素はツリー構造になっています。

また、別のウィジェットを子供として保持することも出来ます。

以下のような、背景画像、アイコン画像、テキストからなるウィジェットの場合、2つの描画要素と Label ウィジェットで構成できます。

描画要素の作成

描画要素の UIElement には、標準で RootUIElement と UIPrimitive、 UISprite の3種類があります(表1)。

表1 UIElement の種類
UIElement 描画要素の基底抽象クラスです。UIElementには1つのテクスチャを設定することが出来ます。
RootUIElement UIElement のツリー構造のルートになるクラスです。ウィジェットのオブジェクトの生成時に一つだけ生成されます。Widget.RootUIElement プロパティから取得することが出来ます。
UISprite 矩形の描画要素です。一つの UISprite に複数の矩形を含めることが出来ます。
UIPrimitive ポリゴンやラインを表示することが出来る描画要素です。

UISprite

UISprite は矩形を表示する描画要素で、もっとも簡単な描画要素になります。

一つの UISprite で複数の矩形を表示することが出来ます。

1つの矩形をあらわすのが、 UISpriteUnit です。

UISpriteUnit は左上の位置と幅、高さ、上下左右のテクスチャ座標を指定することが出来ます。

UISprite オブジェクトを作成する場合は、コンストラクタで UISpriteUnit の最大数を設定します。

ImageAsset image = new ImageAsset("/Application/img.png");

sprite = new UISprite(1);
sprite.ShaderType = ShaderType.TextureArgb;
sprite.Image = image;

UISpriteUnit unit = sprite.GetUnit(0);
unit.X = 0.0f;
unit.Y = 0.0f;
unit.Width  = image.Width;
unit.Height = image.Height;

this.RootUIElement.AddChildLast(sprite);

イベント処理

タッチイベントに対する処理を記述する場合は、OnTouchEvent メソッドをオーバーライドして下さい。

タッチ点とウィジェットのヒット判定をカスタマイズする場合は、HitTest メソッドをオーバーライドしてください。

同様に、キーイベントに対する処理を記述する場合は、OnKeyEvent メソッドをオーバーライドし、モーションイベントに対する処理を記述する場合は、OnMotionEvent メソッドをオーバーライドしてください。

毎フレームごとの更新処理

毎フレームごとの更新処理が必要な場合は OnUpdate メソッドを使用します。

そのウィジェットに特化したアニメーションを作成する場合などに使用することが出来ます。 なお、汎用的なアニメーションを作成する場合はEffectクラスを使用することを推奨しています。

更新処理を記述したい場合には OnUpdate メソッドをオーバーライドし、必要な処理を記述します。 OnUpdate メソッドはフレーム毎に一回呼ばれます。

ただし、Visible プロパティが False の場合は、OnUpdate メソッドは実行されません。