學習Android onTouch偶然遇到的關於獲取點擊坐標(getX(),getY())的問題 -开发者知识库

學習Android onTouch偶然遇到的關於獲取點擊坐標(getX(),getY())的問題 -开发者知识库,第1张

剛開始學習Android的時候遇到一個問題,本來按照預期的效果,運行下列代碼應該可以檢測出手指在手機屏幕上的滑動方向(up,down,left,right)的,但程序運行的實際結果是只能檢測到向下(down)和向上(up)兩種結果,說明兩個方向軸的偏移量都是大於零的(即offsetX和offsetY都大於零),即以下兩句沒有賦值成功。
startX=event.getX();
startY=event.getY();
但通過Log打印的結果顯示,startX和startY的值都是非零的,即獲取到了點擊點(action_down)處的坐標值。所以一直很困惑,既然打印出的startX和startY都沒有問題,那為什么判斷的時候就出現了問題呢?會不會是第一個case語句中的值改變的時候第二個case語句沒有引用到,所以第二個case語句中的startX和startY都是初始值0,導致了只能檢測到向下和向右滑動?
於是做了一下測試,即在第二個case語句中打印startX和startY的值,顯示結果都為0.0,所以證明此處引用的卻確實是變量的初始值。
這里只要把相關變量聲明在onTouchEvent()函數的外部就可以達到正確的結果了。估計是Java基礎沒學好,所以在這里浪費了不少時間,但
也有不少收獲,最重要的是學到了如何發現問題,然后一步步的去排查可能導致問題的原因,然后才能順利的解決問題。

public boolean onTouchEvent(MotionEvent event) {
float startX = 0,startY = 0;
float offsetX,offsetY;
switch (event.getAction()){

    case MotionEvent.ACTION_DOWN:
startX=event.getX();
startY=event.getY();
Log.d("MainActivity","" startX "" startY);
break;
case MotionEvent.ACTION_UP:
offsetX=event.getX()-startX;
offsetY=event.getY()-startY;
if(Math.abs(offsetX)>Math.abs(offsetY)){
if(offsetX>15){
goRight();
}
else if(offsetX<-15) {
goLeft();
}
}
else {
if(offsetY>15) {
goDown();
}
else if(offsetY<-15){
goUp();
}
}
break;
}
return true;

}

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复