いくつかの計算を実行するには、ビューのキャンバスのサイズにアクセスできる必要があります。何らかの理由で、 に渡されたビューの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);
}