Wie kann ich die Leinwandgröße einer benutzerdefinierten Ansicht außerhalb der onDraw-Methode erhalten?
Ich muss in der Lage sein, um den Zugriff auf die Größe der Ansicht canvas-Bereich, um einige Berechnungen auszuführen. Aus irgendeinem Grund, die Größe der view übergeben onSizeChanged
anders ist als die Größe des canvas übergeben onDraw
. Mein Aktueller workaround verwendet ein boolean-flag, um zu bestimmen, wenn ich brauche zu tun, die Berechnungen.
Die ideale Lösung würde mir erlauben, um diese Berechnungen zu tun, in der onSizeChanged
Methode, so Frage ich mich... gibt es eine Möglichkeit, ich kann ahold die Canvas
Objekt (oder zumindest die Abmessungen), die außerhalb des onDraw
Methode?
Mein code ist unten. Es ist, zieht man den radius von einem Kreis in einem bestimmten Winkel. Wenn ich canvas.centerX()
bestimmen die anfangs-und Endpunkte Punkte für den radius, alles funktioniert perfekt. Wenn ich den übergebenen Parameter in onSizeChanged
es ist nicht sogar entfernt in der Nähe zu korrigieren.
@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);
}
InformationsquelleAutor der Frage dfetter88 | 2011-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Zeichnung Zwecke, sollten Sie nicht wirklich die Dimensionen der
Canvas
Objekt.Verwenden Sie einfach die Dimensionen, die Sie in der
onSizeChanged
Methode. Sie können entweder speichern Sie die Abmessungen für den Einsatz in deronDraw
Methode oder vergrößern Sie/ziehen Sie zu einem backing-bitmap, die Sie ziehen können mit später.Update:
Schnell Schlagsahne, einige code, es sieht aus wie das funktioniert:
Update 2
Folgenden die Kreis-code aktualisieren.
Wir dies tun können:
Werden Sie sehen, dass diese funktioniert nun auf beliebigen Größe anzeigen.
InformationsquelleAutor der Antwort Che Jami