キャンバス上の書き込みをキャプチャするように設計されたアプリを開発しています。このアプリは、HTC Flyer (Android 2.3.3) で使用するように設計されています。
このデバイスには既に Scribbler がインストールされているため、[自動起動 Scribbler モード] を無効にしましたが、[各アプリのペン履歴] はオンのままにしました。
私のテストでは、アプリがタッチスクリーン上の私の指を検出できますが、スタイラスは検出できないことがわかりました。スタイラスのボタンを組み合わせて押しても無駄でした。
コードは Android Developers の TouchPaint に基づいています: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
上記のコードで説明されているように、パッケージをインポートしませんでした
com.example.android.apis.graphics;
私の Eclipse IDE では、Override 属性を削除する必要があることを示唆する問題として次のように報告されました。
@Override
public boolean onHoverEvent(MotionEvent event) {
return onTouchOrHoverEvent(event, false /*isTouch*/);
}
だから私はしました。
以下をマニフェストに追加しました。
<uses-configuration android:reqTouchScreen="stylus"/>
<uses-configuration android:reqTouchScreen="finger"/>
アプリはタッチスクリーン上の指の動きを検出できますが、スタイラスは検出できません。なんで?
また、Android Developers ガイドでは、MotionEvents が getToolType を参照していることにも注意しましたが、Eclipse の「Intellisense」では表示されません。
http://developer.android.com/reference/android/view/MotionEvent.html#getToolType%28int%29
メソッド getToolType は、私の Android コードでは使用できません。このメソッドを使用して、指やスタイラスなどのタッチ入力の種類を確認できると思いました。
PaintView の onTouchListener も追加しました (TouchPaint コードに基づく)。
this.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return touchSurface(v, event);
}
});
touchSurface コード
private boolean touchSurface(View v, MotionEvent event) {
boolean complete = true;
int pAction = event.getAction();
int pActionIndex = event.getActionIndex();
Log.i("SignName", "touchSurface event fired.");
Log.i("SignName", "Pointer Action: " + pAction + ", pActionIndex: " + pActionIndex);
return complete;
}
指を使うと、上記のイベントが発生します。スタイラスを使用すると、発射されません。なんで?
この問題は HTC Flyer だけに限定されているのでしょうか。アプリの設定を上書きする Scribbler アプリがあるか、コードが間違っているためです。
手伝ってくれませんか?
(更新: 2012 年 4 月 27 日) 問題の原因がわかりました。混乱を招いたのは専用スタイラス HTC Flyer でした。
このスタイラスが機能しない場合、他のスタイラスも機能しないと思いました。ただし、別のスタイラスを試してみましたが、うまくいきました。
でも、助けてくれてありがとう。