我已经想出了如何使用ontouch监听器,但我仍然有一些问题。我想要动画的2D地图从鸟的角度来看,查看面积是由一个设置的坐标是计算在屏幕的中间。我想得到在事件中移动的距离,并通过这些值改变中间坐标的位置。但它似乎只起了一次作用,我对听众做错了什么吗?
代码:
Activity实现了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,实现runnable:
@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(线程,FRAME_RATE);}
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");
}非常感谢:)
发布于 2013-05-04 02:35:35
对于每个有相同问题的人使用"MotionEvent.ACTION_MOVE“,它只是在你移动的整个过程中返回的值,do xou可以创建一个类似谷歌地图的地图。
https://stackoverflow.com/questions/16267541
复制相似问题