スレートPC上でのマルチタッチ開発メモその1

ONKYOのスレートPCを入手した。

tw217_main

http://www.jp.onkyo.com/pc/personalmobile/

さっそく、マルチタッチアプリケーションを作ってみる。

まずは、スレートPC上では開発できないというか、とてもやりにくいので、メインPC上で開発して、スレートPC上で動作させる形。リモートデバッグはできないので、ちょっと厄介かも。

ちょっとイベントがどのように取れているのか確認するプログラムをWPFで作ってみる。

.NET Framework 4.0 がないと動かないので、.NET Framework 4.0をインストール。

TouchEnter, TouchMove, TouchLeave, TouchUp関連は、

private void image1_TouchMove(object sender, TouchEventArgs e)
{
    this.textBoxTouchType.Text = “TouchMove”;

    ShowTouchParams(e);
}

private void ShowTouchParams(TouchEventArgs e)
{
    this.textBoxID.Text = “Touch ID = ” + e.TouchDevice.Id;

    TouchPoint tp = e.GetTouchPoint(this);

    this.textBoxPointX.Text = tp.Position.X.ToString();
    this.textBoxPointY.Text = tp.Position.Y.ToString();
    this.textBoxWidth.Text = tp.Size.Width.ToString(); // 値取れず
    this.textBoxHeight.Text = tp.Size.Height.ToString(); // 値取れず

    this.textBoxBoundsX.Text = tp.Bounds.X.ToString();
    this.textBoxBoundsY.Text = tp.Bounds.Y.ToString();
    this.textBoxBoundsW.Text = tp.Bounds.Width.ToString(); // 値取れず
    this.textBoxBoundsH.Text = tp.Bounds.Height.ToString(); // 値取れず
}

Manipulation系は、

IsManipulationEnabled を trueにセットして、
private void checkBoxManipulationEnabled_Click(object sender, RoutedEventArgs e)
{
    this.image1.IsManipulationEnabled = (bool)checkBoxManipulationEnabled.IsChecked;
    this.textBoxManipulation.Text = this.image1.IsManipulationEnabled.ToString();
}

private void image1_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    this.textBoxManipulation.Text = “ManipulationDelta”;
    this.textBoxRotationDelta.Text = e.DeltaManipulation.Rotation.ToString();
    this.textBoxManipulationOrigX.Text = e.ManipulationOrigin.X.ToString();
    this.textBoxManipulationOrigY.Text = e.ManipulationOrigin.Y.ToString();
    this.textBoxRotation.Text = e.CumulativeManipulation.Rotation.ToString();
    this.textBoxManTransX.Text = e.CumulativeManipulation.Translation.X.ToString();
    this.textBoxManTransY.Text = e.CumulativeManipulation.Translation.Y.ToString();

    if (e.DeltaManipulation.Rotation != 0)
    {
        Matrix mat = this.image1.RenderTransform.Value;
        mat.RotateAt(e.DeltaManipulation.Rotation, e.ManipulationOrigin.X, e.ManipulationOrigin.Y);
        this.image1.RenderTransform = new MatrixTransform(mat);
    }
    else
    {
        Matrix mat = this.image1.RenderTransform.Value;
        mat.Translate(e.CumulativeManipulation.Translation.X, e.CumulativeManipulation.Translation.Y);
        this.image1.RenderTransform = new MatrixTransform(mat);
    }
}

イナーシャーは、

private void checkBoxInertier_Click(object sender, RoutedEventArgs e)
{
    if(checkBoxInertier.IsChecked == true)
        Manipulation.StartInertia(this.image1);
}

private void image1_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e)
{
    this.textBoxManipulation.Text = “ManipulationInertiaStarting”;
    this.textBoxManipulationOrigX.Text = e.ManipulationOrigin.X.ToString();
    this.textBoxManipulationOrigY.Text = e.ManipulationOrigin.Y.ToString();

    e.TranslationBehavior.DesiredDeceleration = 0.001;
    e.RotationBehavior.DesiredDeceleration = 0.001;
}

これで、Delta, Cumulative が取れた。イベントをモニタリングのためにTextBoxに書き出していたら、かなりもっさりした感じになってしまった。

リモートデバッグできないのは、やっかいだな。

移動・ローテーションは、もう少しまともなコードの気がするが、とりあえず機能の説明を忘れないうちにっと。あとでスクリーンショットをもらおう・・・

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です