作成者別アーカイブ: まなよめ

まなよめ について

@MANAKA4kPM ほしいもの 主にクライアントのプログラムを担当しています。C#でサーバサイドとかもやってます。

表示方向変更プラグイン for 提督業も忙しい!をリリースしました

| | 艦これ | ,

全体

表示方向変更プラグイン for 提督業も忙しい!をリリースしました。

提督業も忙しい!の情報表示場所を左右上下、好きな場所に変更できます。
設定は保存されるので、起動するたびに表示方向を設定する必要はありません!

ダウンロードはこちらからどうぞ。

ウィンドウを画面端にスナップさせるビヘイビア

| | WPF, プログラミング | ,

WPFアプリケーションを作ってて「ウィンドウがモニタの端にスナップ(吸い付くように自動で移動)してほしい!」っていうあなた!
そんな簡単に時に使えるビヘイビアです。

スナップ距離やスナップ有効・無効の設定のバインディングもできます。
あとモニタの表示倍率が100%でないときでも動作します(たぶん)。

WPFなのにSystem.Windows.Forms.dllとSystem.Drawing.dllを参照する必要がありなんだか負けた気がしますが、気にしないでいきましょう。

使う時はこんな感じです。

実際に使う時はPresentationSourceの取得に失敗したりするかもしれないので、エラー処理は忘れずに。

Xamarin.Formsでカメラを使う – Windows Phone 8編

| | 未分類

XAML Advent Calender 2014 12日目の記事です。

Advent Calenderで連載物なんて載せちゃって怒られそうな気がしなくもなくなくないですが、今回は前回「Xamarin.Formsでカメラを使う – Android編」に引き続きXamarin.FormsでWindows Phone 8のカメラを使う方法をご紹介します。
恐縮ですが、この記事を読む前に前回の記事をお読みください。

なおサンプルプログラムをGithubで公開しています。
完全なコードは、こちらをご覧ください。

準備

まずCustomeRendererとCameraPreviewクラスを前回の記事に従い、PCLプロジェクトに作成します。

WP8用プロジェクトでの実装

WP8用のプロジェクトでは、WP8に特化したViewRendererのサブクラスを作成します。

Xamarin.Forms.dllの更新

前回の記事にも書いたように、Generic版のViewRendererを利用するため、WP8のプロジェクトで参照しているXamarin.Forms.dllをVersion 1.2.2.*以降にアップデートする必要があります。
NuGetパッケージマネージャから更新しましょう。
xamarin.forms_update

カスタムレンダラの実装

Xamarin.Forms.Platform.WinPhone.ViewRendererクラスを継承した、CameraPreviewRendererクラスを作成します。

TViewにはPCL内で定義したCameraPreviewクラス、TNativeViewにはカスタムレンダラで実際に表示させるプラットフォーム固有のViewを指定します。
今回はContentControlをこのNativeViewとし、その中にViewBoxコントロール,Canvasコントロールを配置し、Canvasコントロールに映し出したカメラのプレビュー画像を自動でリサイズできるように実装します。
XAMLで書くとこんな感じです。

ViewBoxの外側にContentControlを置いておかないとViewBoxのリサイズがうまく働かないので注意してください。

XAML Advent CalenderらしくこのコントロールをXAMLで書くのもいいかとは思うのですが、今回は簡略化のためcsのコードのみで実装します。

コントロールが初期化されるタイミングでCameraを初期化し、CameraPreviewクラスより写真撮影要求が発行されたときに写真撮影命令を発行、写真撮影が完了したらCameraPreviewのOnPictureTaken()を呼び出しその旨を通知しています。
ViewRenderer.LoadedイベントとViewRenderer.Unloadedイベントがポイントで、このタイミングでCameraの初期化・破棄を行うことで、Xamarin.FormsのViewのライフサイクルに合わせたリソースの取得・確保ができます。

カスタムレンダラのExport

カスタムレンダラを実装したら、Xamarin.Forms.ExportRendererAttribute 属性を用いて作成したカスタムレンダラをExportします。
前回と同じく、以下の一行をコードの先頭部分などに記述するだけです。

これで、カスタムレンダラの実装は完了です。

カスタムレンダラを利用する。

作成したカスタムレンダラを利用してカメラのプレビューを表示させるのですが、実はこの時点で前回作成したPLCプロジェクトを全く変更せず、WP8においてもカメラプレビューを表示できます。

動作確認

実際にアプリケーションを動かして動作を確認してみましょう。

WP8のエミュレータ上でアプリケーションを起動すると、次のようにプレビューが表示されます。
WP_capture

TakePictureボタンをタップするとその場で写真が撮影され、以下の撮影写真プレビュー画面へ遷移します。
WP_capture_taken

正常に写真が撮影され、画像として取得できていることが確認できました。


前回に引き続きXamarin.Formsを利用しWindows Phone 8でカメラプレビュー画像を表示しました。
本記事ではWindows Phone 8用プロジェクトにWindows Phone 8用のCameraPreviewRendererを実装したのみで、PLCプロジェクトは前回と全く同じ物を利用しています。
このあたりはCustom Rendererの高い抽象度とその利便性がわかります。Xamarin.Forms万歳です。直接WinRT叩けよという異論は認めます。