我試圖從Android中的MotionEvent
s序列中準確讀取ACTION_MOVE
delta。避免在Android中合併ACTION_MOVE MotionEvents
我在屏幕上滑動手指的測試表明,在初始ACTION_DOWN
之後,幾個MotionEvent
不會傳送給收聽者。只有在進行了足夠大的移動後,ACTION_MOVE
事件纔會以相對較大的增量傳送。在第一個ACTION_MOVE
事件之後,所有的三角洲都再次變得非常小。
或者,也可以觸摸屏幕(0)並略微移動,但根本沒有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)
換句話說,我想避免在第二行中的大的增量(-16/-9 ),但接收1或2的順序增量...
我對三星Galaxy S2和筆記做了測試。
任何幫助或建議,高度讚賞!
它是在運動或死區時間之後的ACTION_DOWN,在此期間,ACTION_MOVEs被禁用死區?也許你可能想嘗試找出哪一個。 – NickT
您可以通過使用event.getHistoricalX/Y()方法 – Sameer
這絕對是在運動的死區獲得更多的積分。當(1)觸摸('ACTION_DOWN')並保持手指穩定並且在一秒開始移動之後或(2)在等待的情況下在屏幕上滑動時,可以觀察到相同的行爲。第一個'ACTION_MOVE'事件具有總是最大的三角洲 - 好像有需要**最小增量**的'ACTION_DOWN'後報告了'ACTION_MOVE'之前。 – msto