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