マルチタッチで、複数画像を選択・拡大・縮小・回転するには:2カ月で160本作った還暦開発者が送る10のアプリ開発ノウハウ(2)(2/2 ページ)
古(いにしえ)からのVBでWindows 8.1向けのさまざまな機能のアプリを開発する手順やコツを解説していく。今回は、マルチタッチで、複数画像を選択・拡大・縮小・回転するアプリを作る方法について。
ロジックコードを記述する
次に、[ソリューション・エクスプローラー]内の「MainWindow.xaml」を展開して表示される、「MainWindow.xaml.vb」をダブルクリックしてコードを記述する。
ここでは、コードが長くなるため、主にページがアクティブになった時の処理(OnNavigatedToメソッド処理)について解説する。全てのコードを見る場合は、サンプルのプロジェクトをダウンロードして「MainWindow.xaml.vb」ファイルを見ていただきたい。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim no As Integer = 0 Dim xmldoc As XElement = XElement.Load("photo_etc.xml") For Each result In From c In xmldoc.Descendants("情報") Select c Dim myImage As New Image With myImage .Width = 640 .Height = 480 .Source = New BitmapImage(New Uri("ms-appx:///Images/" & result.Element("画像名").Value, UriKind.Absolute)) .RenderTransform = New CompositeTransform .ManipulationMode = ManipulationModes.All End With ShowArea.Children.Add(myImage) ‘ このプログラムの肝。画像の移動、拡大縮小、回転の処理だ。 AddHandler myImage.ManipulationDelta, Sub(mySender As Object, myArgs As Input.ManipulationDeltaRoutedEventArgs) Dim myTrans = DirectCast(myImage.RenderTransform, CompositeTransform) myTrans.TranslateX = myTrans.TranslateX + myArgs.Delta.Translation.X myTrans.TranslateY = myTrans.TranslateY + myArgs.Delta.Translation.Y myTrans.ScaleX = myTrans.ScaleX * myArgs.Delta.Scale myTrans.ScaleY = myTrans.ScaleY * myArgs.Delta.Scale myTrans.CenterX = 320 myTrans.CenterY = 240 myTrans.Rotation = myTrans.Rotation + myArgs.Delta.Rotation myImage.SetValue(Canvas.ZIndexProperty, no) no += 1 End Sub Next End Sub
以降、上記コードの中身を詳細に見ていこう。
まず、変数「no」を宣言し「0」で初期化しておく。
次に、XElement.LoadメソッドでXML文書ファイル(photo_etc.xml)を読み込む。読み込んだXMLのDescendantsメソッドで、すべての子孫要素<情報>に対して、要素の値を変数resultに格納しながら反復処理を行う。
新しいImageのインスタンス「myImage」オブジェクトを作成する。[Width]に「640」、[Height]に「480」の値を指定し、[Source]プロパティに、画像を格納している「ms-appx:///Images」フォルダーと、<画像名>要素の値を連結して設定する。
UIElementの描画位置に影響する変換情報を設定する[RenderTransform]プロパティに、1つのオブジェクトに複数の異なる変換を適用できる「CompositeTransform」を指定する。
ジェスチャーとともにUIElementの動作および操作に使用される[ManipulationMode]に、すべての相互作用モードを有効にする、「ManipulationModes.All」を指定。UIElement.ManipulationModes列挙体については、下記のURLを参考にしてほしい。
「ShowArea」というCanvasに各プロパティの設定されたmyImageオブジェクトを追加。これで、画像が表示されるようになる。画像は左隅上に重なって表示される。
AddHandlerステートメントで、操作中に入力デバイスが位置を変更した時に発生するManipulationDeltaイベントに、イベントハンドラを追加する。イベントハンドラ内では以下の処理を行う。
TranslateXとTranslateYで、x軸とy軸に沿って並行移動する距離を、ScaleXとScaleYで、オブジェクトを拡大縮小する値を設定する。
[Rotaion]プロパティでオブジェクトを回転させる。[CenterX]と[CenterY]には実際の画像サイズの半分の[Width]と[Height]の値を指定する(320と240の値)。これで、画像の中心を起点として回転するようになる。
SetValueメソッドでZIndexPropertyに1ずつ加算される変数noの値を指定する(選択された画像が一番手前に配置されるようになる)。
次回は、選択した画像をトリミングして保存させる
今回は、ここまでだ。また、次回お会いしよう。次回は選択した画像をトリミングして保存させる方法を紹介する。
関連リンク
本コンテストでは、2013年9月1日〜12月1日に新たにWindowsストアに新規公開されたアプリを募集します。入賞したアプリの製作者には、総額130万円の賞金が授与されますので、ふるってご応募ください。
著者プロフィール
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 今でしょ! の終わりに安齋、家入らが評価したアプリとは〜「エイっと作ろう! Windowsストア アプリ選手権」授賞式レポート
謎のキャラ今出しょう子をマスコットに据えたコンテストを勝ち上がった10作品のプレゼン模様などをお届け。 - 初のアジャイル/リモート開発体制でも成功できた秘訣とは〜「Windowsタブレット向けアプリ開発」先駆けインタビュー
日本料理のレシピを海外に紹介するアプリ「Ippin」。初物づくしのアプリ開発を成功させた秘訣をディレクターに聞いた。コミュニケーションツールやドキュメントに盛り込んだ数々の工夫とは、どんなものだったのだろうか。 - Web開発者が手っ取り早くストアデビューする方法(1):Windowsストアにアプリを登録するための事前準備
Windowsストア初心者のために(主に、HTMLやJavaScriptを扱うWeb開発者向けに)、簡単なアプリを開発してWindowsストアに手っ取り早くデビューする手順を解説します。初回は、Microsoftアカウントの取得、Windowsストアアプリ開発者登録、開発環境準備について。 - 連載:Windowsストア・アプリ開発入門:第1回 Windowsストア・アプリってどんなもの?
ついにWindows 8.1の正式版がMSDNサブスクライバー向けに公開された。無償アップデートとなるため、今後は新しいWindows 8.1ストア・アプリが一般化するだろう。最新環境向けに新たにアプリ開発を始める人のための連載スタート。 - 特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点
Windows 8.1(Preview版)の変更点や新機能を開発者視点で紹介。Windows 8用に作られたWindowsストア・アプリにはどんな影響があるのか? - UXClip(11):これからが本番、Windows 8アプリ開発
12月3日夜、Windows 8のハードウェアやアプリを開発者向けに紹介するイベントが行なわれた - Windows 8提供開始、対応アプリ登場は期待できるか?
マイクロソフトはWindows 8の提供を正式に開始した。Windowsストアもスタートし、いよいよWindows 8プラットフォームが市場投入となる。