Android 使用“移动”操作拖动对象
我正试图让我画的所有精灵都可以在一个小游戏中拖动。它应该能够触摸任何地方,精灵应该移动相同的距离,手指移动 使用以下方法,他们将在动作移动事件中移动,但移动速度非常慢,距离较短,有时不移动: addToX/Y仅将间隙添加到精灵的坐标Android 使用“移动”操作拖动对象,android,motionevent,Android,Motionevent,我正试图让我画的所有精灵都可以在一个小游戏中拖动。它应该能够触摸任何地方,精灵应该移动相同的距离,手指移动 使用以下方法,他们将在动作移动事件中移动,但移动速度非常慢,距离较短,有时不移动: addToX/Y仅将间隙添加到精灵的坐标 @Override public boolean onTouchEvent(MotionEvent evt){ switch(evt.getAction()){ case MotionEvent.ACTION_DOWN: br
@Override
public boolean onTouchEvent(MotionEvent evt){
switch(evt.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
if(getHistorySize() > 0){
for(int i = 1, n = evt.getHistorySize(); i < n; i++){
int calcX = (int) getHistoricalX(i) - (int) getHistoricalX(i-1);
int calcY = (int) getHistoricalY(i) - (int) getHistoricalY(i-1);
for(Sprite sprite : spriteList) {
sprite.addToX(calcX);
sprite.addToY(calcY);
}
}
}
return true;
}
@覆盖
公共事件(MotionEvent evt){
开关(evt.getAction()){
case MotionEvent.ACTION\u DOWN:
打破
case MotionEvent.ACTION\u移动:
如果(getHistorySize()>0){
for(int i=1,n=evt.getHistorySize();i
有什么想法吗?假设您的
Sprite
类是android.view.view
的(可能是间接的)扩展,那么您可以使用setOnDragListener()
为它们定义onDrag()
覆盖。然后您可以使用startDrag(…)
开始拖动。这通常由要拖动的视图上的长按手势触发,但在您的情况下,您可以从操作中的onTouchEvent()
中触发它一次(甚至操作向下
)。有关这些方法的更多详细信息,请参阅
另外,关于您发布的代码,它的一个问题可能解释了为什么它不总是起作用,那就是您只使用历史点(在对onTouchEvent()
的任何特定调用中可能积累了历史点,也可能没有积累历史点)
大于0,您仍然应该在每次调用onTouchEvent()
时使用evt.getX()
和evt.getY()
。当然,如果您使用我建议的拖动侦听器方法,您不必担心这一点
按评论更新
如果要同时移动所有精灵,可以将精灵置于全屏
FrameLayout
中,并附加一个gesturedector
,该检测器使用gesturedector.SimpleOnGestureListener
捕获onScroll()
回调,然后调用scrollTo()
在FrameLayout
上。当父级FrameLayout
滚动时,它的所有子精灵都会一起移动。问题是,我希望所有精灵只需拖动一次就可以移动,以达到类似滚动的效果。很抱歉,如果我弄错了,但我对此有点陌生。@guennin ah ha。所以有一个ea我会更新我的答案的。