Android にマルチタッチ ジェスチャを挿入する方法を探しています。これまでのところ、/dev/uinput を開き、ファイル記述子に書き込みます。このソリューションは「ワンタッチ」で機能します。マルチタッチ入力を挿入するには?
3626 次
2 に答える
4
私の経験では/dev/uinput
、タッチ ジェスチャは難しいでしょう。一部のデバイスでのみ機能するシングル タッチを実装しました。他のものでは、「ホバー」の効果しかありません。
次に、Androidのタッチデバイスを使用しまし/dev/input/eventX
た(ルートアクセスがあれば可能です)。タッチ入力がどのように機能しているかを確認する最善の方法はgetevent /dev/input/eventX
、デバイス自体でバイナリを使用することです。Linuxのマルチタッチ プロトコル入力では、マルチタッチの機能と動作が非常にうまく説明されてgetevent
おり、16 進コードを解読した後に表示される内容の背景がよくわかります (そして、それらを のようなより意味のあるものに変換しますABS_MT_POSITION_X
)。
要するに:
- どの
/dev/input/eventX
デバイスがタッチ入力デバイスであるかを調べます。ABS_MT_* イベントを登録したデバイスです。getevent -il
これはコマンドで確認できます( で実行adb shell
) - そのようなイベントをサポートする入力デバイスが
/dev/input/event2
. getevent /dev/input/event2
からコマンドを発行しadb shell
、画面に触れます。- 次の 3 つの列を含む出力が画面に表示されます。
- イベント カテゴリ( の場合
EV_ABS
、これは です0003
) - イベントコード(
ABS_MT_SLOT
これは0x002f
- イベント値 (スロット番号、座標、圧力、またはイベントが定義するもの)
- イベント カテゴリ( の場合
- イベントがどのように見えるかを見て、それらを再生してください。この方法で、マルチタッチ イベントとジェスチャを挿入できます。
getevent /dev/input/event2
たとえば、ダブルタップの注釈付き出力:
0003 002f 00000001 // slot 1 (finger 1)
0003 0039 000019fe // tracking id for slot 1
0003 0035 00000146 // position x
0003 0036 00000117 // position y
0003 0030 00000033 // touch area
0000 0000 00000000 // sync
0003 002f 00000000 // slot 0 (finger 0)
0003 0039 000019ff // tracking id for slot 0
0003 0035 000000cb // position x
0003 0036 00000164 // position y
0003 0030 00000028 // touch area
0000 0000 00000000 // sync
0003 0039 ffffffff // relese finger 0
0000 0000 00000000 // sync
0003 002f 00000001 // slot 1
0003 0039 ffffffff // release finger 1
0000 0000 00000000 // sync
于 2014-06-11T21:38:18.487 に答える
0
これが機能するかどうかはわかりませんが(アプリからこれを実行していると想定しています)、同時に実行される(そして/ dev / uinputに書き込む)一連のAsyncTasksを使用して、同時タッチをシミュレートできます。
于 2013-01-22T00:42:53.860 に答える