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");
}
非常感謝你:)