Android のACTION_MOVE
一連の s からデルタを正確に読み取ろうとしていました。MotionEvent
ACTION_DOWN
ただし、画面上で指をスワイプした私のテストでは、最初の の後、いくつかMotionEvent
の がリスナーに配信されないことが示唆されています。十分に大きな移動が行われた後にのみACTION_MOVE
、比較的大きなデルタでイベントが配信されます。この最初のACTION_MOVE
イベントの後、すべてのデルタは再び非常に小さくなります。
または、画面 ( ) に触れてACTION_DOWN
少し動き回っても、ACTION_MOVE
イベントはまったく配信されません。
多くの用途において、特定の動き (鈍感) を持つことが有益であることを理解しています。ACTION_MOVE
ただし、最初の小さな動きがすべて配信されるように、イベントの合体を回避する方法はありますか? ACTION_DOWN
位置と最初の位置の間の最小距離に設定できるしきい値はありACTION_MOVE
ますか?
サンプルコードは次のとおりです。
private float lastX;
private float lastY;
public boolean onTouch(View v, MotionEvent ev) {
final float y = ev.getX();
final float x = ev.getY();
final int hs = ev.getHistorySize();
final int ac = ev.getAction();
switch(ac)
{
case MotionEvent.ACTION_DOWN:
{
this.lastX = x;
this.lastY = y;
Log.i("TEST", "Down at " + x + "/" + y + " (History size="+hs+")");
return true;
}
case MotionEvent.ACTION_MOVE:
{
Log.i("TEST", "Move at " + x + "/" + y + ": Delta="+(lastX-x)+"/"+(lastY-y) + " (History size="+hs+")");
this.lastX = x;
this.lastY = y;
return true;
}
case MotionEvent.ACTION_UP:
{
Log.i("TEST", "Up at " + x + "/" + y + " (History size="+hs+")");
return true;
}
}
}
対応する出力:
Down at 376.0/259.0 (History size=0)
Move at 392.0/268.0: Delta=-16.0/-9.0 (History size=0)
Move at 394.0/268.0: Delta=-2.0/0.0 (History size=0)
Move at 395.0/269.0: Delta=-1.0/-1.0 (History size=0)
Move at 394.0/268.0: Delta=1.0/1.0 (History size=0)
Move at 396.0/269.0: Delta=-2.0/-1.0 (History size=0)
Move at 399.0/271.0: Delta=-3.0/-2.0 (History size=1)
Move at 401.0/272.0: Delta=-2.0/-1.0 (History size=0)
Move at 403.0/273.0: Delta=-2.0/-1.0 (History size=0)
Move at 404.0/273.0: Delta=-1.0/0.0 (History size=0)
Move at 405.0/274.0: Delta=-1.0/-1.0 (History size=0)
Move at 406.0/275.0: Delta=-1.0/-1.0 (History size=0)
Up at 406.0/275.0 (History size=0)
つまり、2 行目の大きなデルタ (-16/-9) は避けたいのですが、1 か 2 の順序でデルタを受け取りたいのです...
Samsung Galaxy S2 と Note でテストを行いました。
どんな助けや提案も大歓迎です!