我正在尝试为一个类制作一个基本的"Paint"风格的应用程序,我尝试实现的一部分是能够绘制一个圆圈,当用户移动手指选择中心时,圆圈的大小会缩放,并将其向外拖动到所需的半径。问题是,无论我怎么尝试,它最终只是在用户移动手指的地方重复地戳出一个小圆圈。这个想法是,应用程序将获取按下时中心的坐标(tX, tY),每次用户移动时画一个半径为r的圆,然后在他们抬起手指时完成它。
编辑:注释掉的部分是我测试不同东西的部分。
onMotionEvent自定义类的代码:@Override
public boolean onTouchEvent(MotionEvent event) {
//detect user touch
float tX = event.getX();
float tY = event.getY();
float rX = 0;
float rY = 0;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(tX, tY);
break;
case MotionEvent.ACTION_MOVE:
if(shapes){
rX = (int) event.getX();
rY = (int) event.getY();
r = (float) Math.sqrt(Math.pow(tX - rX, 2) + Math.pow(tY - rY, 2));
drawCanvas.drawCircle(tX, tY, r, drawPaint);
invalidate();
}else{
drawPath.lineTo(tX, tY);
}
break;
case MotionEvent.ACTION_UP:
/*rX = event.getX();
rY = event.getY();
r = (float) Math.sqrt(Math.pow(tX - rX, 2) + Math.pow(tY - rY, 2));*/
if(shapes){
if(shape_sel == 0){
//drawCanvas.drawCircle(tX, tY, r, drawPaint);
drawPath.reset();
/*}else if(shape_sel == 1){
}
else{
*/}
}else{
drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
}
break;
default:
return false;
}
invalidate();
return true;
}
您不是在触地时保存tx和ty,而是在每个事件时重置它们。您需要将tx和ty保存在类级别变量中,并将其放在下大小写中。