旋转android画布会导致myRect.contains(X,Y)不起作用

时间:2014-05-09 21:59:44

标签: android rotation android-canvas ontouchevent

我已经编写了一个自定义视图,在屏幕中央显示文本,如下所示。 enter image description here

我也做了这样的话,如果你触摸绿色框,你可以旋转和缩放文本,如下所示。 enter image description here

这是问题所在。 每当我旋转文本然后松开,然后尝试再次旋转它无法检测到使用myRect.contains(X,Y)触摸了rect。 过了一段时间后,我发现它旋转后,触摸原始绿色框所在的位置,它可以让我再次旋转。

OnTouchEvent显然正确地计算了Rects位置,因为它在正确的位置绘制。我只能弄清楚为什么触摸坐标似乎是在引用旧位置。

这是我的onDraw()方法。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.rotate((float)mAngle, mBorderRect.centerX(), mBorderRect.centerY());
    canvas.drawRect(mBorderRect, mTextBorderPaint);
    canvas.drawText(mText, mBorderRect.left, mBorderRect.bottom, mTextPaint);
    canvas.drawRect(mResizeRect, mBGPaint);
    canvas.restore();

}

1 个答案:

答案 0 :(得分:1)

请记住,您正在旋转画布,而不是Rect。要使其工作,您必须首先在触摸位置应用反向旋转,然后计算myRect.contains(X,Y)。