我正在构建一个自定义视图。
它有4个弧。
我在
我想做的是在
编辑:
通过“不是一个矩形”,我的意思是,我不想检测用户触摸这些区域(矩形的角落)的时候:
它有4个弧。
我在
onDraw()
期间使用RectF
形状绘制弧。// arcPaint is a Paint object initialized
// in the View's constructor
arcPaint.setStrokeWidth(strokeWidth);
arcPaint.setColor(arcColor);
// Draw arcs, arc1, arc2, arc3 & arc4 are
// measured and initialized during onMeasure()
canvas.drawArc(arc1, startAngle, arc1Angle, false, arcPaint);
canvas.drawArc(arc2, startAngle, arc2Angle, false, arcPaint);
canvas.drawArc(arc3, startAngle, arc3Angle, false, arcPaint);
canvas.drawArc(arc4, startAngle, arc4Angle, false, arcPaint);
因此,结果是:
如果我使用以下代码使用canvas.drawRect()
绘制RectF
对象:canvas.drawRect(arc1, arcPaint);
canvas.drawRect(arc2, arcPaint);
canvas.drawRect(arc3, arcPaint);
canvas.drawRect(arc4, arcPaint);
结果是这个:
将所有图形,包括弧和矩形,绘制在一起,得到这个: 我知道我可以重写onTouchEvent()
方法并获取X、Y坐标,但我不知道每个坐标与画布中绘制的每个形状之间的关系。我想做的是在
canvas
中检测当一个弧被触摸时,而不是一个矩形,我该怎么做?编辑:
通过“不是一个矩形”,我的意思是,我不想检测用户触摸这些区域(矩形的角落)的时候:
RectF
方法centerX()
/centerY()
获取它。然后,你可以用基本的距离公式计算出到触摸点的距离:distance = sqrt(dx² + dy²)。然后,如果该距离与弧的半径之差的绝对值小于等于Paint
笔画宽度的一半,则触摸点在该弧上。明白我的意思吗?应该很容易检查触摸是否在开放的90°内,并在那里忽略它。 - Mike M.dx²
和dy²
中的d
是什么? - Jorge E. Hernández