フリックが簡単だといったやつは誰だぁ!

速度と移動量のモーションを判別する方式でフリック実装しようとした時にいろいろ問題が。
・いったんタップして、左右とかうろうろ移動したあとでの上フリック動作(タップと同時にフリックの動作であればわると簡単だけどそういうわけにもいかない)
・誤動作防止のこと(普通のタップの時にわずかに上に移動した場合にフリック動作に認識されないようにする。このしきい値が、左右うろうろ後の上フリックとかの認識率と干渉する恐れがあってかなり多くのサンプルを取って検証しないと操作性の低下を招く)
・画面解像度をもとに移動量を計算するか、画面の物理サイズをもとに移動量を計算するかという悩み。たとえば極端な話、100インチのモニタで操作する場合とかに操作性が大きく変わってくる。そんな大画面での操作は実際ありえないけど。(設定メニューに追加しても意味不明な項目になることが必至)


不可能ではないのですが、プログラムはそこそこ大変だし(左右うろうろ動作の後のフリックを実装する場合は過去にさかのぼってモーションイベント履歴を取らないといけなかったり)、使いやすさの個人差を解消しきれるかどうかという問題があって、、、


んでもっていろいろ仕様を検討した結果、モーションによるフリック判別でなく、指の移動した座標情報で捨て牌を判別する、フリックというよりはドラッグの動作を採用することにしたとです。
牌をタップした状態で、一定量上にドラッグさせると牌の上に矢印が出て、矢印が出てる状態で指離すと捨て牌になる。というような具合。
これを素早く行えばフリックのような動作を認識しているような錯覚に浸れるという。
有名なところですと、Simeji(Shimejiではない)のフリックがこんな方式です。


「上フリックされたよ」ってのがOSのインタフェースとして提供してくれればいいのにね。たとえばClickableでなくて、Flickableみたいなパラメータがあれば。というようなことは期待しています。


文書で表すとわかりにくいかもしれないけど整理してみた。
・最初に牌にタップしたもしくはフォーカスインした時点からY座標が牌1個ぶんもしくは、手牌の始点Y座標より上にドラッグされたら矢印を出す。
・矢印が出ている状態では、左右移動は行わない
・矢印は、上にドラックさせすぎるか、左右にドラッグさせすぎる(この移動量は解像度依存)と消える。矢印はいずれかの手牌に再度フォーカスインしない限り矢印の表示は復活しない。
・矢印は、手牌の始点Y座標より下もしくは、最初のタップY座標+牌の長さより下にドラッグさせても消える。フリックのキャンセルができる。
・フリックキャンセルの場合は、ダブルタップによる捨て牌が行われないようにする(矢印が一回でも出たらダブルタップ動作はキャンセルになる)。
・矢印が出ている状態もしくは、矢印が出る条件の時に、指を離すと捨て牌が行われる


という仕様で、(土曜ですが)どうでしょう?