我需要进行控制,并且多点触控存在问题。
这个概念很简单:
用户执行以下操作时会出现问题:
我想要一个仅能获得屏幕上最后一根手指的'X'位置的代码
我的实际代码:
@Override
public boolean onTouchEvent(MotionEvent event)
{
int index = MotionEventCompat.getPointerCount(event) - 1;
float x = (int) MotionEventCompat.getX(event, index);
@SuppressWarnings("deprecation")
int ancho = AEngine.display.getWidth();
switch (MotionEventCompat.getActionMasked(event))
{
case MotionEvent.ACTION_DOWN:
if (gameView != null)
gameView.touchNave(x, ancho);
break;
case MotionEvent.ACTION_POINTER_DOWN:
if (gameView != null)
gameView.touchNave(x, ancho);
break;
case MotionEvent.ACTION_MOVE:
if (gameView != null)
gameView.touchNave(x, ancho);
break;
case MotionEvent.ACTION_UP:
Nave.estado = AEngine.NAVE_STAY;
break;
case MotionEvent.ACTION_POINTER_UP:
Nave.estado = AEngine.NAVE_STAY;
break;
}
return false;
}
我通过使用LinkedHashMap并使用它的最后一项代码来实现的:
LinkedHashMap<Integer, Float> al = new LinkedHashMap<Integer, Float>();
@Override
public boolean onTouchEvent(MotionEvent event)
{
int index = MotionEventCompat.getActionIndex(event);
int id = event.getPointerId(index);
float x = (int) MotionEventCompat.getX(event, index);
@SuppressWarnings("deprecation")
int ancho = AEngine.display.getWidth();
switch (MotionEventCompat.getActionMasked(event))
{
case MotionEvent.ACTION_DOWN:
anadir(id,x);
break;
case MotionEvent.ACTION_POINTER_DOWN:
anadir(id,x);
break;
case MotionEvent.ACTION_UP:
al.remove(id);
break;
case MotionEvent.ACTION_POINTER_UP:
al.remove(id);
break;
}
if(al.size() > 0)
{
if (gameView != null)
gameView.touchNave(getX(al), ancho);
}
else
{
Nave.estado = AEngine.NAVE_STAY;
}
return false;
}
public float getX(LinkedHashMap<Integer,Float> map) {
Iterator<Map.Entry<Integer,Float>> iterator = map.entrySet().iterator();
float x = 0;
while (iterator.hasNext()) {
x = iterator.next().getValue();
}
return x;
}
public void anadir(int id,float x)
{
if (al.size() > 0 || !al.containsKey(id))
{
al.put(id, x);
Log.e("WTF",Integer.toString(id)+ "añadido");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句