Android多点触摸事件问题...拖动时没有新的触摸事件?
所以我想做的是一个小太空游戏,你使用触摸
和拖动
通过屏幕上的图形操纵杆来控制飞船。我已经让它工作得很好。当我开始尝试添加触摸屏幕顶部来发射武器的功能时,问题就出现了。由于某种原因,如果您当前拖动操纵杆,它似乎会忽略其他触摸输入并且不执行任何操作(但一旦我停止握住操纵杆
,它就可以正常工作)。
这是我第一次使用 java,也是第一次使用 Android
,所以它可能是一些愚蠢的事情,但我已经坚持了几天了。
不管怎样,这是我的代码。
下面是我的
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
@Override
public boolean onTouchEvent(MotionEvent event) {
fingers= event.getPointerCount(); //Returns 1 or 2 properly if 2 fingers on screen
playership.onTouchEvent(event); //Pass the event along to the spaceship object
return true;
//return super.onTouchEvent(event); //no idea what this does, but it seems to disable the drag event
}
下面是playership.onTouchEvent(event);下面
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
if(event.getY()<(Panel.mHeight-150))
{
Laser1.reset(mX,mY,(int)event.getX(),(int)event.getY());
}
break;
}
joy1.onTouchEvent(event);
return true;
}
是joy1.onTouchEvent(event);
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
//Offset between mouse(x,y) and center
double offx=oX-event.getX();
double offy=oY-event.getY();
double d=Math.sqrt((offx*offx)+(offy*offy));
switch (eventaction )
{
case MotionEvent.ACTION_DOWN:
if(d<dragrange) //Start Dragging if clicked
{
offx=offx/d;
offy=offy/d;
Dragging=true;
reset = false;
dX=(int) (offx*dragrange);
dY=(int) (offy*dragrange);
}
break;
case MotionEvent.ACTION_MOVE:
if(Dragging)//if joy is already being draged, update it.
{
offx=offx/d;
offy=offy/d;
if(d>dragrange)
{
dX=(int) (offx*dragrange);
dY=(int) (offy*dragrange);
}
else
{
dX=(int) (offx*d);
dY=(int) (offy*d);
}
reset = false;
}
break;
case MotionEvent.ACTION_UP:
if(Dragging)
{
Dragging=false;
}
break;
}
return true;
}
所以,是的,问题是,如果操纵杆位于MotionEvent.ACTION_MOVE 的中间,它似乎会阻止任何其他触摸事件的正确注册。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要处理检测另一根手指。更具体地处理
MotionEvent.ACTION_POINTER_DOWN
和MotionEvent.ACTION_POINTER_UP
否则您将忽略其他手指。这是我的一个项目中的一些代码,它完全符合您的要求:
请参阅 此处了解更多说明。
You need to handle detecting the other finger. More specifically handling
MotionEvent.ACTION_POINTER_DOWN
andMotionEvent.ACTION_POINTER_UP
otherwise you're ignoring other fingers. Here is some code from one of my projects that does exactly what you're looking for:
See here and here for more explanation.