2017-07-29 15 views
1

私は、ユーザーのタッチを検出し、画面がタッチされたときに円を描くカスタムビューを持っています。異なる指のために異なる円。そして、ユーザーが指を取り除くと円がクリアされます。今、私は指を動かしながら円を動かさなければなりません。 私は指を動かしながら1つの円だけ動かすことができます。画面に1本以上の指がある場合、どのように指の方向にすべての円を動かすことができますか?複数のタッチの動きを追跡する

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()); 
     } 

    } 
} 

ポインタクラス

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; 
} 

}

+0

あなたはポインタのカウントを取得し、インデックス番号を使用して、円上で動作するようにgetPointerCountメソッドを使用することができます。

はこれを試してみてください。 –

+0

この増量はあなたに役立ちます。 https://developer.android.com/reference/android/view/MotionEvent.html –

答えて

0

私はこの問題は、drawメソッドであると思います。 pointerListは、ポインターIDをキーとして使用するMapです。 描画メソッドでは、0からtotal pointers - 1までの範囲のキーを持つすべてのポインタを取得しようとしていますが、これは間違っています。ポインターをインデックスで取得しようとしていますが、IDで格納されています。

@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()); 
    } 
} 
+0

ありがとうございます。しかし、それは複数の円のドラッグの問題を解決しませんでした – Nabin

関連する問題