パッドに何かを描くことができる非常に単純な Android アプリケーションを作成します。画面に指で触れると緑色のボールが表示され、指を動かすと赤い線が表示されます。
しかし、私は非常に奇妙なことを発見しました: 画面を 2 本の指で 1 本ずつ非常に速くタッチすると、2 本の指の間に線が引かれます! (キーボードの 2 つのキーを押しているイメージjkjkjkjkjkjjkjkjkjkjkjkj
)
キー コードは非常に単純です。
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
multiTouch = false;
id = event.getPointerId(0);
PointF p = getPoint(event, 0);
path = new Path();
path.moveTo(p.x, p.y);
paths.add(path);
points.add(copy(p));
break;
case MotionEvent.ACTION_POINTER_DOWN:
multiTouch = true;
for (int i = 0; i < event.getPointerCount(); i++) {
int tId = event.getPointerId(i);
if (tId != id) {
points.add(getPoint(event, i));
}
}
break;
case MotionEvent.ACTION_MOVE:
if (!multiTouch) {
p = getPoint(event, 0);
path.lineTo(p.x, p.y);
}
break;
}
invalidate();
return true;
}
完全なソースはこちら: https://github.com/freewind/TouchTest/blob/master/src/com/example/MyImageView.java
そして、それは動作するデモです: https://github.com/freewind/TouchTest
または、署名済みの apk を Android デバイスにダウンロードして、自分でテストすることもできます: https://github.com/freewind/TouchTest/blob/master/TouchTest.apk?raw=true
私のコードでわかるように、マルチタッチであるかどうかを確認し、その場合の描画を無効にしました。
Android のバージョンは 4.0 で、コード ターゲットは 2.3.3 です。
私のアンドロイドパッドに写真があります:
いくつかの線があることがわかりますが、赤い線の左側に緑のボールがあるはずです。
Android が速いシングル タッチを移動として扱う理由がわかりません。3 つの理由を考えました。
- 私のコードには何か問題があります
- Android SDK に問題があります
- ACTION_DOWN イベントがないなど、Android パッドに問題があります。
本当の理由を知るには?
アップデート
私の友人の 1 人は彼の android モバイル (android 2.1) を使用してこのアプリをテストし、赤い線がないことを発見し、別の人は android 2.3.5 を使用し、赤い線があることを発見しました。
コードを確認してください。マルチタッチをチェックしました。複数のポイントがある場合ACTION_POINTER_DOWN
は何もしません。ACTION_MOVE
したがって、id
of ポイントは必要ありません。(実際、このコードの最初のバージョンで使用id
しましたが、同じ問題があります)。
そして、これは予期された動作ではないと思います。なぜなら、これは、感動的なプログラムの開発を難しくしたからです。私の別のアプリケーション(ユーザーは指で画像をドラッグ/ズーム/回転できる)で、画像が画面上で「ジャンプ」することがあるため、この問題が見つかりました。
Android パッドと iTouch で人気のゲーム (Fruit Ninja) を試してみたところ、Android バージョンには問題がありましたが、iTouch には問題がありませんでした。
今、何か問題があると確信しています (最初の指が上がったときにイベントが欠落しているACTION_UP
) が、何が原因なのかまだわかりません。私のアンドロイドパッド?またはAndroid SDK?