我试图为一个类制作一个基本的#34; Paint" -esque应用程序,而我尝试实现的部分内容是能够绘制一个可以扩展的圆圈用户移动手指以拾取中心的大小,并将其向外拖动到所需的半径。问题是,无论我尝试什么,它都会在用户移动手指的地方反复冲压一个小圆圈。我们的想法是,应用程序将在按下时获取中心的坐标(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;
}
答案 0 :(得分:0)
您不会在触地时保存tx和ty,而是在每次事件中重置它们。你需要在down case中保存类级别变量中的tx和ty。