[英]Tracking multiple touch movement
I have a custom view which detects user touch and draws a circle when screen is touched. 我有一个自定义视图,该视图可检测用户触摸并在触摸屏幕时画一个圆圈。 Different circles for different fingers.And circle is cleared when user removes the finger.
不同手指的不同圆圈。当用户移开手指时,圆圈将被清除。 Now i have to move the circle while moving the fingers.
现在我必须在移动手指的同时移动圆圈。 i can only move 1 circle while moving fingers.
我只能在移动手指的同时移动1圈。 IF i have more than 1 finger on screen, how can i move all the circle in the finger direction?
如果我的屏幕上有多个手指,如何在手指方向上移动所有圆圈?
public boolean onTouchEvent(MotionEvent event) {
int pointerIndex = event.getActionIndex();
int pointerId = event.getPointerId(pointerIndex);
int maskedAction = event.getActionMasked();
switch (maskedAction){
case MotionEvent.ACTION_DOWN: {
Pointers pointer = new Pointers();
pointer.setX(event.getX(pointerIndex));
pointer.setY(event.getY(pointerIndex));
pointer.setPaint(getPaint());
pointersList.put(pointerId,pointer);
break;
}
case MotionEvent.ACTION_POINTER_DOWN: {
Pointers pointer = new Pointers();
pointer.setX(event.getX(pointerIndex));
pointer.setY(event.getY(pointerIndex));
pointer.setPaint(getPaint());
pointersList.put(pointerId,pointer);
break;
}
case MotionEvent.ACTION_MOVE:{
int size = event.getPointerCount();
Pointers point = pointersList.get(pointerId);
if (point != null) {
point.setX(event.getX(pointerIndex));
point.setY(event.getY(pointerIndex));
}
}
break;
case MotionEvent.ACTION_UP:{
pointersList.remove(pointerId);
}
case MotionEvent.ACTION_POINTER_UP: {
pointersList.remove(pointerId);
break;
}
case MotionEvent.ACTION_CANCEL:{
pointersList.remove(pointerId);
break;
}
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int size = pointersList.size();
for(int i=0; i<size;i++){
Pointers point = pointersList.get(i);
if(point != null){
canvas.drawCircle(point.getX(),point.getY(),SIZE,point.getPaint());
}
}
}
Pointer Class 指针类
public class Pointers {
private float x,y;
private Paint paint;
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public Paint getPaint() {
return paint;
}
public void setPaint(Paint paint) {
this.paint = paint;
}
} }
I think the problem is in the draw method. 我认为问题出在绘制方法上。 From what I can tell
pointerList
is a Map
that uses the pointer ID as the key. 据我所知,
pointerList
是一个使用指针ID作为键的Map
。 In the draw method you're trying to get all the pointer that have the key in the range 0
to total pointers - 1
which is incorrect. 在draw方法中,您尝试获取键范围在
0
到total pointers - 1
,这是不正确的。 You're trying to get the pointers by index but they were stored by ID. 您试图按索引获取指针,但它们是按ID存储的。
Try this: 尝试这个:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for(Map.Entry<Integer, Pointers> entry : pointersList.entrySet()){
Pointers point = entry.getValue();
canvas.drawCircle(point.getX(),point.getY(),SIZE,point.getPaint());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.