我正在尝试创建一个简单的绘图应用程序,用户可以按下自定义视图的一个点并拖动它来创建一个矩形或一个圆圈,我设法很容易做到。
当我尝试向用户显示随着它变大或变小时移动形状的进度时出现问题。
要解释它,如果您在桌面上单击并拖动鼠标,我希望获得与Windows相同的效果。
这是我的onTouchEvent
方法,我该怎么做?
if (chosenShape.equals("rectangle")) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // user start pressing
//starting point - one side of the rect
starting_X = touchX;
starting_Y = touchY;
break;
case MotionEvent.ACTION_MOVE: // user move while pressing
break;
case MotionEvent.ACTION_UP: // user release
//ending point - thie side of the circle
ending_X = touchX;
ending_Y = touchY;
// draw the rectangle - opposite side of the rect
drawCanvas.drawRect(starting_X, starting_Y, ending_X, ending_Y, drawPaint);
chosenShape = ""; // reseting the shape to keep drawing
break;
default:
return false;
}
} else {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
break;
default:
return false;
}
}
答案 0 :(得分:1)
在case MotionEvent.ACTION_MOVE:
中,您需要设置ending_X
和ending_Y
值。
更好的是跟踪intermediate_x
和intermediate_y
,以便您可以绘制不同的效果,例如虚线而不是实线。
您可能最好存储用户绘制的所有形状,并在每次触摸事件进入时刷新画布,否则当您拖动广告时,您将获得彼此绘制的形状,它们将不会被清除。