Adobe AIR マルチタッチをタッチイベントだけで動かす | サイバーエージェント 公式エンジニアブログ
はじめまして、サイバーエージェント新規開発局のK.です。

現在Adobe AIR for Android(AIR 2.5)でマルチタッチの実装をしていますが
Adobe AIRでは明示的に1本指用イベント(タッチイベント)と2本指用イベント(ジェスチャーイベント)を切り替える必要があるため
2本指で拡大縮小、回転できるようにすると2本指でないと平行移動できません
それを1本指で平行移動、2本で拡大縮小、回転が同時にできるようにします。

用件
インプットモードは1本指用イベント(タッチイベント)を指定して

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

タッチイベント2点でジェスチャーイベントと同じ挙動を実現させます。
表示オブジェクトに1つにつきタッチポイントは最大2個まで
タッチポイント1個の時は平行移動
2個の時は拡大縮小、回転、3個目は無視する。
さらに以下の3点も追加します。
拡大縮小の最小値制御
拡大縮小の最小値制御を行い
反転を防いだり、小さくなりすぎてタッチ不可能にならないようにします。
回転の制御
フラグで回転の可否が出来るように
変形の初期化
変形前に戻す処理です。

自作しようかと思いましたが
Adobe XDの方が既に作ってましたので
MultiDraggable Touch API
まずはこちらをそのまま実装します。

結果
移動,拡大はかなりスムーズに動きますが
回転が思うように動いてくれません。
調べた結果
MultiDraggable Touch APIの不具合でなく
AIR 2.5のTouchEventでのstageYの値が1点目と2点目で入れ替わることがあり
回転が逆になります。

Android上だけの現象なのか調べます。
Windows7でのタッチインターフェイスでためしてみます、
Windows7+AIRで動かしてみますと問題なく動作しました。
(Windows7+AIRのジャスチャーイベントは正直動作がいまいちだったのですが
このAPIを使うとスムーズに動作します!)
AIR 2.5が問題なのか、androidとAIR 2.5間が問題なのか
これ以上は調査できませんが
とりあえず。
今回は平行移動と拡大縮小が必要なので
MultiDraggable Touch APIに回転制御と拡大縮小の最小値制御を追加します。
以下xd.geometry.MatrixHelperに追加していきます。

回転の制御
回転なしの場合はMatrixのb,cプロパティを0に設定します。

public static function matrixFromBaseLine(p1:Point, p2:Point, isRotate:Boolean, scale:Number = 0):Matrix
{
//省略
    if(isRotate)
        return new Matrix(delta.x, delta.y, -delta.y, delta.x, p1.x, p1.y);
    else
        return new Matrix(delta.x, 0, 0, delta.x, p1.x, p1.y);
}


Matrixについての詳しくはこちら

拡大縮小の最小値制御
拡大縮小の最小値制御を追加します。
a,dプロパティを設定値より小さくならないように制御

public static function deltaMatrix(a1:Point, b1:Point, a2:Point, b2:Point, isRotate:Boolean, minScale:Number):Matrix
{
//省略
if(m1.a < minScale) m1.a = minScale;
if(m1.d < minScale) m1.d = minScale;
}


変形の初期化
ダブルタップで変形の初期化も実装します。
MatrixHelperに変形初期化を追加
表示位置は指定可能にします。

public static function resetMatrix(point:Point):Matrix
{
return new Matrix(1, 0, 0, 1, point.x, point.y);
}


以上で今回用件を満たせるものができました。
TouchEventの入れ替わる件は困りましたが、リリース版では修正されていると期待して
今回作ったもので、Adobe AIR for Androidのアプリ実装をすすめます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
今回の環境
Android: hardware:nexsus one / OS:Android OS2.2 / software:Adobe AIR 2.5
Windows7: hardware:lenovo S10-3t / OS:Windows 7 Home Premium / software:Adobe AIR 2.0.3