2012-05-02 47 views
1

绘制圆我已经搜查有关多点触控&我得到了很多例子 如何使用多点触控

PICH放大&放大了&

越来越多触点座标但

相关

我想使用多点触摸绘制一个视图上的圆圈..我试过这个,但是当我画它的坐标改变了圆形没有画在我触摸屏幕的确切位置..

这里是代码....

public class TestMultiTouchActivity extends Activity { 
public class MultiTouchView extends View { 

    // In this test, handle maximum of 2 pointer 
    final int MAX_POINT_CNT = 2; 

    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    float[] x = new float[MAX_POINT_CNT]; 
    float[] y = new float[MAX_POINT_CNT]; 
    boolean[] isTouch = new boolean[MAX_POINT_CNT]; 

    public MultiTouchView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     if (isTouch[0]) { 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(1); 
      paint.setColor(Color.RED); 
      // canvas.drawCircle(x[0], y[0], 50f, paint); 
     } 
     if (isTouch[1]) { 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(1); 
      paint.setColor(Color.BLUE); 
      // canvas.drawCircle(x[1], y[1], 50f, paint); 
     } 
     float x1 = (Math.abs((x[0] - x[1])))/2; 
     float y1 = (Math.abs((y[0] - y[1])))/2; 

     float r = Math.abs(x1 - x[0]); 
     canvas.drawCircle(x1, y1, r, paint); 

    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // TODO Auto-generated method stub 
     setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 
       MeasureSpec.getSize(heightMeasureSpec)); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent motionEvent) { 
     // TODO Auto-generated method stub 

     int pointerIndex = ((motionEvent.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT); 
     int pointerId = motionEvent.getPointerId(pointerIndex); 
     int action = (motionEvent.getAction() & MotionEvent.ACTION_MASK); 
     int pointCnt = motionEvent.getPointerCount(); 

     if (pointCnt <= MAX_POINT_CNT) { 
      if (pointerIndex <= MAX_POINT_CNT - 1) { 

       for (int i = 0; i < pointCnt; i++) { 
        int id = motionEvent.getPointerId(i); 
        x[id] = (int) motionEvent.getX(i); 
        y[id] = (int) motionEvent.getY(i); 
       } 

       switch (action) { 
       case MotionEvent.ACTION_DOWN: 
        isTouch[pointerId] = true; 
        break; 
       case MotionEvent.ACTION_POINTER_DOWN: 
        isTouch[pointerId] = true; 
        break; 
       case MotionEvent.ACTION_MOVE: 
        isTouch[pointerId] = true; 
        break; 
       case MotionEvent.ACTION_UP: 
        isTouch[pointerId] = false; 
        break; 
       case MotionEvent.ACTION_POINTER_UP: 
        isTouch[pointerId] = false; 
        break; 
       case MotionEvent.ACTION_CANCEL: 
        isTouch[pointerId] = false; 
        break; 
       default: 
        isTouch[pointerId] = false; 
       } 
      } 
     } 

     invalidate(); 
     return true; 
    } 
} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new MultiTouchView(this)); 
} 
+0

感谢您发布的代码,但是你还没有真正问了一个问题。有什么特别的你想要帮助吗? –

回答

2

试试这个计算圆的大小/位置:

// Calculate average x and y. 
float x1 = (x[0] + x[1])/2.0f; 
float y1 = (y[0] + y[1])/2.0f; 

// Calculate the distance between the points 
float r = Math.sqrt(Math.pow(x[1] - x[0], 2.0f) + Math.pow(y[1] - y[0], 2.0f)/2.0f; 

canvas.drawCircle(x1, y1, r, paint);