3

Android API Level 11 (ICS)MotionEventにはtransformMatrix. これにより、実際に私がやっていることは幾分きれいになりますが、レベル 8 用にコーディングしています。

MotionEvent.transform()以前のバージョンの Android で動作する便利な代替手段はありますか? 履歴座標とマルチタッチ座標をすべて変換して、相対座標と絶対座標の違いを正しく処理できるようにしたいと考えています。

私が本当に知りたいのはMotionEvent、別の の変換されたコピーであるを作成できるかどうかですMotionEvent。実際には任意の変換は必要ありませんが、変換とスケーリングの両方ができる必要があります。で翻訳できると思いますが、 (レベル 11 より前の)offsetLocationをスケーリングする方法がわかりません。MotionEvent特に、マルチタッチ イベントの座標を変換するにはどうすればよいですか? メソッドはobtain、配列ではなく単一の (x,y) ペアを取ります。

これを行う理由は、一連の「子」オブジェクトにイベントをディスパッチするオブジェクトが 1 つあるためです。現在、これらの子のそれぞれが、アドホックな方法で座標を変換しています。ただし、親 (ディスパッチャ) は実行する必要がある変換を知っているMotionEventため、子にディスパッチする前に (またはコピー) を変換する方がはるかにクリーンです。別の方法として、 をラップするMotionEventか、 からデータをコピーして変換する独自のクラスを作成するMotionEventこともできますが、MotionEvent.

4

1 に答える 1

3

私の知る限り、答えは「いいえ」です。MotionEventAndroid のハニカム以前のバージョンでは、最初のもの以外の pointerId の座標を操作する方法はないようです。

私が思いついた回避策は、独自のラッパー クラス (たまたま と呼んでいた) を作成し、委任するときTouchEventの代わりにこれを使用することでした。これは、標準のインターフェイスを実装している場合には機能しませんが、私の場合、デリゲートのインターフェイスを制御したので、このソリューションは十分に機能します。MotionEventonTouch

于 2011-11-10T06:55:09.473 に答える