Мне нужно иметь доступ к размеру холста представления для выполнения некоторых вычислений. По какой-то причине размер представления, переданного в 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);
}