[英]How to get correct coords(event.getX() / event.getY()) of Object with OnTouchListener
[英]Event.getX() gets wrong values when using onTouchListener
這是第一個代碼:
btn1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
int x_cursor = (int) event.getX();
x_initial_touch = event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x_initial_touch = event.getX();
break;
case MotionEvent.ACTION_MOVE:
System.out.println(event.getX())
btn1.animate().translationX(x_cursor - x_initial_touch ).setDuration(0);
break;
}
return false;
}
});
這是第二個代碼:
btn1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
int x_cursor = (int) event.getX();
x_initial_touch = event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x_initial_touch = event.getX();
break;
case MotionEvent.ACTION_MOVE:
System.out.println(event.getX())
any_other_button.animate().translationX(x_cursor - x_initial_touch ).setDuration(0);
break;
}
return false;
}
});
在第一個代碼中,當我向左拖動按鈕時,打印的值是:57 56 57 55 57 54 57 53 等等......
在第二個代碼中,當我將按鈕拖到左側時,打印的值是:57 56 55 54 53 52 51 50 等等......(這非常好,也是我想要的)。 我的問題是為什么在第一個代碼中,當我嘗試通過觸摸並拖動它來拖動按鈕時, event.getX() 會后退一些然后繼續。 我問這個是因為你可以想象按鈕不會平滑移動,它會回來一毫秒以啟動 position。 希望你明白我想說什么。
編輯我已經使用event.getRawX();解決了這個問題而不是event.getX();
您的x_cursor
和x_initial_touch
都等於event.getX()
,因此您的translationX
調用的參數始終為零,這將重置初始 position。 因此,在每次移動之后,您都會獲得一個對應於重置初始 position 的事件。 如果你翻譯any_other_button
,那么當它的 position 被重置時,它不會將事件發送到btn1
,所以在第二種情況下你看不到交錯的 57。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.