cara menggambar lingkaran menggunakan Multitouch

saya telah mencari tentang Multitouch & saya mendapat banyak contoh terkait

gambar memperbesar & memperkecil &

mendapatkan beberapa koordinat sentuhan tetapi

saya ingin menggunakan multisentuh untuk menggambar lingkaran pada tampilan.. saya mencoba ini tetapi ketika saya menggambarnya, koordinatnya berubah, lingkaran tidak tergambar tepat di tempat saya menyentuh layar..

ini KODEnya....

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

person SilentKiller    schedule 02.05.2012    source sumber
comment
Terima kasih telah memposting kode, tetapi Anda sebenarnya belum mengajukan pertanyaan. Dengan bantuan khusus apa Anda memerlukan bantuan?   -  person Thunder Rabbit    schedule 02.05.2012


Jawaban (1)


Coba ini untuk menghitung ukuran/posisi lingkaran:

// 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);
person Marcus Forsell Stahre    schedule 02.05.2012