我需要能够访问视图画布的大小来执行一些计算。由于某种原因,传递给的视图onSizeChanged
的大小与传递给的画布的大小不同onDraw
。我当前的解决方法使用布尔标志来确定何时需要进行计算。
理想的解决方案将允许我在方法中进行这些计算onSizeChanged
,所以我想知道......有什么方法可以Canvas
在方法之外获得对象(或至少它的尺寸)onDraw
?
我的代码如下。它以给定角度绘制圆的半径。当我canvas.centerX()
用来确定半径的起点和终点时,一切正常。如果我使用传递给 的参数onSizeChanged
,它甚至远不接近正确。
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mSizeChanged = true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mSizeChanged) {
RectF bounds = new RectF(canvas.getClipBounds());
float centerX = bounds.centerX();
float centerY = bounds.centerY();
float radianAngle = (float) Math.toRadians(mStartAngle);
mRadius[0] = center;
mRadius[1] = center;
mRadius[2] = center + center * FloatMath.cos(radianAngle);
mRadius[3] = center + center * FloatMath.sin(radianAngle);
mSizeChanged = false;
}
mPaint.setColor(0xFF330000);
mPaint.setStrokeWidth(1);
canvas.drawLines(mRadius, mPaint);
}