2013-04-28 38 views
0

我已經想出瞭如何使用ontouch監聽器,但我仍然有一些問題。 我想要從鳥瞰角度查看2D地圖的動畫,查看區域是通過屏幕中間的座標集來計算的。 我想獲取事件中移動的距離並通過這些值更改中間座標的位置。但它似乎只能工作一次,我是否對聽衆做了什麼錯誤?OnTouchListener(MotionEvent)動畫

代碼:

活動implemets OnTouchListener:

@SuppressWarnings("static-access") 
@Override 
public boolean onTouch(View v, MotionEvent e) { 
    switch (e.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      startX = e.getX(); 
      startY = e.getY(); 
      gb.movedDist.put("startX", startX); 
      gb.movedDist.put("startY", startY); 
      break; 
     case MotionEvent.ACTION_UP: 
      finX = e.getX(); 
      finY = e.getY(); 
      gb.movedDist.put("finX", finX); 
      gb.movedDist.put("finY", finY); 
      break; 
    } 
    return false; 
} 

}

定製SurfaceView,實現可運行:

 @Override 
    public void run() { 
     frame.removeCallbacks(thread); 

     while(isRunning) { 
      if(!holder.getSurface().isValid()) 
       continue; 
      setMoveValues(); 
      handleTouch(); 

      Canvas canvas = holder.lockCanvas(); 

      p.setColor(Color.BLACK); 
      for(Coordinate dC : ch.getVisibleCoords()) { 
       drawLandscape(dC, canvas); 
      } 
      drawItems(canvas); 
      drawBeings(canvas); 
      drawGUI(canvas); 

      holder.unlockCanvasAndPost(canvas); 

// frame.postDelayed(線程,幀頻); }

public void handleTouch() { 
     int distX = (int) Math.floor(startX - finX); 
     int distY = (int) Math.floor(startY - finY); 
     if(distX <= 0 || distY <= 0) return; 
     if(distX > sh.getTSize() && distY > sh.getTSize()) { 
      int rectDistX = distX/sh.getTSize(); 
      int rectDistY = distY/sh.getTSize(); 
      boolean checkingEdges = true; 
      while(checkingEdges) { 
       if(rectDistX > 0 && animateMap.checkRightEdgeVisible()) 
        break; 
       if(rectDistX < 0 && animateMap.checkLeftEdgeVisible()) 
        break; 
       if(rectDistX > 0 && animateMap.checkBottomEdgeVisible()) 
        break; 
       if(rectDistY < 0 && animateMap.checkTopEdgeVisible()) 
        break; 
       animateMap.animateXYDistance(rectDistX, rectDistY); 
       checkingEdges = false; 
      } 
     } 
     else { 
      animateMap.tellCoordinate(finX, finY); 
     } 
    } 

    public void setMoveValues() { 
     startX = movedDist.get("startX"); 
     startY = movedDist.get("startY"); 
     finX = movedDist.get("finX"); 
     finY = movedDist.get("finY");   
    } 

非常感謝你:)

回答

0

對於有同樣的問題,用「MotionEvent.ACTION_MOVE」它只是返回值的整個時間的youre移動,做XOU可以創建一個地圖就像每個人谷歌地圖。