關於MotionEvent.getX/.getY如何「不可靠」(或其他術語)以及我們應該如何使用這些調用的Raw版本來獲取座標,有許多討論。Android getX/getY交錯相對/絕對座標
在我的Nexus 7上,我發現.getX/.getY可靠地返回交織的絕對座標和相對座標。換句話說,當你調用.getX和.getY時,給定的ACTION_MOVE事件返回絕對座標。接下來的ACTION_MOVE事件將返回其.getX和.getY調用的相對座標。
這不能是意外的行爲。這也讓我相信,必須有一種方法來辨別給定的ACTION_MOVE是否會返回絕對座標或相對座標。
有誰知道如何檢查一個給定的MotionEvent對象,看它是否在它的.getX和.getY調用上返回絕對座標和相對座標?
編輯:根據您的要求,這裏的代碼。沒什麼特別的,只是搶座標和移動View對象:
public boolean onTouch(View v,MotionEvent event) {
boolean bExitValue = true;
float fX;
float fY;
int iAction;
iAction = event.getActionMasked();
if (MotionEvent.ACTION_MOVE == iAction) {
fX = event.getX();
fY = event.getY();
v.setX(fX);
v.setY(fY);
Log.d("",("X: " + fX + ", Y: " + fY));
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
的Log.d電話和獨立浮動是沒有必要的,使代碼的工作,但他們可以讓你看到值的交織在LogCat窗口中。
你可以請你的代碼檢查你的行爲嗎? – thiagolr
上面添加的代碼,謝謝。如果你運行這個程序並且非常緩慢地移動你的手指,你可以一次獲得一個座標對 - 它們將在諸如「X:59.509125,Y:75.56683」和「X:356.14337,Y:489.77722」之類的值之間交替。大不相同的座標對,但奇數組和偶數組將彼此保持一致。這幾乎就像有兩個手指放下(儘管這不是一個MotionEvent會報告多點觸控的方式)。 – AndroidNewbie
如果將[getHistoricalX/Y](https://developer.android.com/reference/android/view/MotionEvent.html#getHistoricalX%28int,%20int%29)添加到輸出中,會發生什麼情況?只有當歷史數據存在時,纔可能返回相對座標? –