タッチイベントを取得する
|WindowsPhone 7アプリケーション作成にあたって、ディスプレイをタッチした場所を知ることで様々なことができます。
例えば、お絵かきソフトの線を指のドラッグによって行ったりなどが可能になります。
そこで今回はWP7のタッチイベントのTouchを紹介します。
WP7でのタッチイベントはTouchというクラスを用います。
Touchでは、ディスプレイ操作を行うと、FrameReportedというイベントが発生します。
FrameReportedイベントは、登録したメソッドがコールバックされます。
Touchを用いるには下記の流れで処理を行います。
- タッチイベントの登録
- タッチの種類によっての処理変更
今回の最後にタッチの座標取得とタッチの種類を表示するサンプルを用意しました。
詳しい内容は続きを御覧ください。
タッチイベントの登録
タッチイベントを登録にはTouchのFrameReportedでタッチイベントが発生した際にコールバックされるメソッドを指定します。
TouchFrameReportedというメソッドをコールバックで呼び出せるようにしたい場合は下記のように記述します。
Touch.FrameReported += new TouchFrameEventHandler(TouchFrameReported);
これでFrameReported イベントが発生するとTouchFrameReportedというメソッドを呼び出されるようになります。
タッチの種類によっての処理変更
FrameReportedのタッチイベントによってコールバックされたメソッドではイベントデータのクラスTouchFrameEventArgsが得られます。
そのイベントデータからタッチの種類と座標を取得することができるTouchPointクラスを得ることができます。
TouchFrameEventArgsの主要なメソッドは下記のようになります。
メソッド名 | 概要 |
---|---|
TouchPoint GetPrimaryTouchPoint (IInputElement relativeTo) | 指定された要素に対する相対的な現在のタッチ点を返します。 nullを設定した場合はディスプレイの左上がを原点とした座標が得られる |
GetPrimaryTouchPointによって得られるTouchPointの主要なプロパティは下記のようになります。
主要なプロパティ | 概要 |
---|---|
TouchAction Action | タッチイベントの最後のアクションを取得します |
Point Position | タッチ ポイントの場所を取得します |
最後にActionにてタッチの種類を判別することが可能ですが、その種類は下記の表の3種類が得ることが可能です。
Actionの種類 | 概要 |
---|---|
Down | 画面に指を置く操作 |
Move | 画面上を指でドラッグする操作 |
Up | 画面から指を離す操作 |
Actionについてですがディスプレイをタッチした状態で指を動作すると下記のような順にActionが得られます
- ディスプレイをタッチ:Down
- ディスプレイ上をドラッグ:Move
- ディスプレイから指を離す:Up
座標取得とタッチの種類の取得
タッチイベントが発生した際にタッチの種類と座標をTextBlockに表示するサンプルコードになります。
16行目、19行目、22行目はタッチの種類ごとに処理を切り分けて文字の表示内容を変更しています。
■MainPage.xaml.cs
public partial class MainPage : PhoneApplicationPage { // コンストラクター public MainPage() { InitializeComponent(); Touch.FrameReported += new TouchFrameEventHandler(TouchFrameReported); } private void TouchFrameReported(object sender, TouchFrameEventArgs e) { TouchPoint touchPoint = e.GetPrimaryTouchPoint(null); switch (touchPoint.Action) { case TouchAction.Down: textBlock1.Text = "Down \nX:" + touchPoint.Position.X + "\tY:" + touchPoint.Position.Y; break; case TouchAction.Move: textBlock1.Text = "Move \nX:" + touchPoint.Position.X + "\tY:" + touchPoint.Position.Y; break; case TouchAction.Up: textBlock1.Text = "Up \nX:" + touchPoint.Position.X + "\tY:" + touchPoint.Position.Y; break; } } }
画面をタッチしたときにタッチの種類はDownとなります。
そのためTextBlockに17行目のDownが表示されます。
そのたまま指を動かすとタッチの種類はMoveとなるので20行目のMoveが表示され、指を画面から離すとUpと表示されます。
このようにタッチのイベントによって動作を切り分けることに応用できます。
このサンプルコードを動かした時の画面は下図のようになります。
TouchクラスからタッチイベントのPosition、Actionから座標や種類が取れるためお絵かきアプリや手書きを行うようなアプリをなどを作ることが可能となります。