Touch Paintのイベント処理

GDDフォンにApiDemoをインストールして遊んでいるうちに、Touch Paintが面白い処理をしていることに気づいた。

押す力が弱くても強くてもあまり差はない。これは、Dev ToolsのPointer Locationで表示されるPressureの値が0 - 0.7くらいでしか変化せず、しかも割と指数関数的な反応をするので、そんなもんだろう。で、これ。

上は指先でドラッグしたとき。下は親指の腹でぐいっと払ったとき。つまり指の接地面積を知ることができるようだ。TouchPaintのコードでは、

        @Override public boolean onTouchEvent(MotionEvent event) {
            int action = event.getAction();
            mCurDown = action == MotionEvent.ACTION_DOWN
                    || action == MotionEvent.ACTION_MOVE;
            int N = event.getHistorySize();
            for (int i=0; i

となっていて、event.getHistoricalSize(), event.getSize()でfloat値が返ってくるようだ。APIのドキュメント*1では

Returns a scaled value of the approximate size, of the area being pressed when touched with the finger. The actual value in pixels corresponding to the finger touch is normalized with the device specific range of values and scaled to a value between 0 and 1. The value of size can be used to determine fat touch events.

0 - 1で正規化された値となっている。デブタッチ検出に使ってくれとのこと。


なにに使えるかと言えば、書道とか面白そうだけど、それよりもタッチされた位置を点で検出するのでなく、面積の重なり具合で当たり判定すると、より人間臭い処理ができるんじゃないかと思うわけで。