2012-10-29 3 views
1

터치를 사용하여 내 이미지 뷰에 여러 원을 그릴 수있게하려고합니다. 지금까지 나는 한 번에 하나씩 그릴 수있었습니다. 터치 포인트를 저장하고 invalidate()를 호출 한 후 모든 원을 다시 그려야하지만 이해할 방법이 없다는 것을 이해합니다. 여기 터치 듣기를 통해 여러 개의 원을 그리려면 어떻게해야합니까?

정말 감사하겠습니다, 내 코드입니다 누군가가 내가 추가/변경하거나 구현하는 방법에 대한 조언을 제공하기 위해 무엇을 지적 할 수 있다면 :

public class ImageView1 extends ImageView { 

public int x; 
public int y; 

ImageView1 img = (ImageView1) findViewById (R.id.imageView1); 


    public ImageView1(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setFocusable(true); 

    } 

    public boolean onTouchEvent(MotionEvent event){ 

     x = (int) event.getX(); 
     y = (int) event.getY(); 


    return true; 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     Paint p = new Paint(); 

    p.setAntiAlias(true); 
    p.setColor(Color.RED); 
    p.setStyle(Paint.Style.STROKE); 
    p.setStrokeWidth(1); 

    canvas.drawCircle(x, y, 20, p); 
     invalidate(); 
} 

} 
+0

언제 원을 그려야할까요? 사용자가 손가락을 내려 놓거나, 움직이거나, 들어 올릴 때? (또는 모두?) – Sam

+0

나는 사용자가 손가락을 내려 놓을 때를 믿는다. –

답변

1

나는 보통 수집하고있어 포인터의 위치 정보를 포인터 ID를 키로하여 SparseArray에 기입한다;

private SparseArray<PointF> mPointers = new SparseArray<PointF>(); 

@Override 
public boolean onTouchEvent(MotionEvent me) { 
    switch (me.getActionMasked()) { 
    case MotionEvent.ACTION_DOWN: 
    case MotionEvent.ACTION_POINTER_DOWN: { 
     int ai = me.getActionIndex(); 
     PointF pt = new PointF(me.getX(ai), me.getY(ai)); 
     mPointers.put(me.getPointerId(ai), pt); 
     return true; 
    } 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_POINTER_UP: { 
     int pid = me.getPointerId(me.getActionIndex()); 
     mPointers.remove(pid); 
     return true; 
    } 
    case MotionEvent.ACTION_MOVE: { 
     for (int i = 0; i < me.getPointerCount(); ++i) { 
      PointF pt = mPointers.get(me.getPointerId(i)); 
      pt.set(me.getX(i), me.getY(i)); 
     } 
     return true; 
    } 
    } 
    return false; 
} 

그러면 별도의 터치 포인트를 렌더링 할 때 mPointers 값을 반복 할 수 있습니다.

+0

제안을 주셔서 감사합니다. 그러나 신인으로, 나는 희소 배열에 대해 잘 알고 있지 않습니다. 나는 내가 배울 수있는 것을 볼 것이다. –

관련 문제