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

Schreibe einen Kommentar