Я создаю приложение для Android, где пользователи могут рисовать и писать с помощью активной ручки на планшете. Пользователь может выбирать между различными режимами (например, перо, ластик, линия, круг ...), который предлагает им различные инструменты.
Инструменты линии и круга позволяют пользователю нарисовать линию/круг с длиной/радиусом и направлением, в котором пользователь рисует ее. Это работает очень хорошо, но каждый раз, когда пользователь перемещает пером, рисуется другая линия/круг, и она заполняет экран.Android: Позвольте пользователю нарисовать линию из одной точки в другую
Код:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas c){
c.drawBitmap(mBitmap, 0, 0, bitmapPaint);
}
private float mX, mY, firstX, firstY;
private void touch_start(float x, float y) { //called from MotionEvent.ACTION_DOWN
path.moveTo(x, y);
firstX = x;
firstY = y;
mX = x;
mY = y;
}
private void touch_move(float x, float y) { //called from MotionEvent.ACTION_MOVE
path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
switch(mode){
case "line":
canvas.drawLine(firstX, firstY, x, y, paint);
break;
case "circle":
canvas.drawCircle(firstX, firstY, (Math.abs(firstX-x) + Math.abs(firstY-y))/1.5f, paint); // divisor 1.5 just a rough value
break;
default:
canvas.drawPath(path, paint);
break;
}
mX = x;
mY = y;
}
Кто-нибудь идея, как я могу это исправить?
Спасибо заранее.
Вы, вероятно, нужно 'canvas.reset()' перед каждым 'drawXxx()'. Если у вас нет 'invalidate()' перед вызовом 'touch_move()', вам также может понадобиться это. – Gary99