2015年1月19日月曜日

筆圧の対応

Tegra NOTE7のタッチパネルは筆圧に対応しているというのも売りの一つでした。
対応アプリがあればそれなりに描けるものの結構癖があります。実際にどんな感じなのか試そう試そうとは思っていました。
ついでなのでタッチパネルテストアプリで遊んでみました。



実際に筆圧はどうやればいいのかメソッドもわかっていないので検索してみると
Androidでスタイラスを利用する方法③ | WDN Engineers' Blog
で event.getHistoricalPressure なるメソッドでとれるっぽいので組み込んでみました。
googleのdevelopersサイトのドキュメントを見てみると
MotionEvent | Android Developers

実際にはヒストリーだけではなく普通にgetPressureも持っているのでそちらも使って組み込んでみるととりあえず動作はできるようになりました。
内部のリングバッファとして使っている領域がfloat×バッファサイズ分思いっきり増えてしまいますが、処理速度はあまり変らないのでそのまま組み込んでみたところ、やはり癖というのが見えてきました。

Tegra NOTE7 のタッチパネル自体マルチポイントといいつつも、内部で補正しきれなくなるのか途中で処理を行われなくなるということが使っていて気がついていたのですが、筆圧に関しても結構適当な感じがあります。





ノイズなのかチャタリングなのかわかりませんが複数タッチした状態だと筆圧が不安定になりやすいです。

シングルタッチであってもタッチペンから指に変えた直後なども筆圧が異常になることもはっきりと認識できました。
細かい部分は不明ですが、もしかするとダイレクトスタイラスの機能としてタッチペン時にタッチペン以外の接触を無効にする機能もあるのでその辺のハンドリングの結果なのかもしれません。(ですが現状この辺の機能は正直微妙でつかいものになりません)

気づくと今までintで持っていた部分をfloatにしたり、描画時の分岐処理やループそのものにも手を入れてしまい、処理時間が若干遅くなってしまったような気がします。

ここ数日バージョンアップを繰り返し連投してしまっているのでもう少し様子を見てからリリースしようかな。

ただ、KitKat以降のフルスクリーン時にアクティビティーを他のアプリに切り替えて戻ってくると、ナビゲーションバーが表示されたままになるという不具合も見つけてしまったのでどうしようかなとも。まぁそうなったら画面を回転させるかアプリを終了して再度実行すればいいのですけど、スリープに落ちた時など戻ったときにもナビゲーションバーが表示されたままになることがあるので、板ばさみ状態(笑)

0 件のコメント:

コメントを投稿