Ich habe gerade eine Flexbox-Komponente entwickelt, die als normaler Komponentencontainer fungiert, aber einen abgerundeten Rechteckhintergrund zeichnet, während ein anderes abgerundetes Rechteck einen Füllgrad angibt. Dafür musste ich den oberen Bereich abschneiden, der nicht gefüllt werden sollte. Das Füllrechteck auf die Füllhöhe zu zeichnen, war keine Option, da die abgerundeten Ecken nicht übereinstimmen würden.
Was ich gelernt habe:
- ich eine Leinwand Komponente erstellt nur für die Erstellung des Füllstandes mit Grenzen 0/0 und Breite/Höhe der Box
- fügte ich hinzu, dass Leinwand auf die Box bei Index 0 über addChildAt()
- ich die includeInLayout Eigenschaft auf false für die Leinwand gesetzt, da es nicht an den Layouten der Box selbst, sondern fungiert als eine Floating-Zeichenfläche auf
- ich habe dann eine andere Leinwand nehmen soll die Maske für diese Füllfläche (addChild()) und m fragen Eigenschaft)
Hier ist ein Code:
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
// super
super.updateDisplayList(unscaledWidth, unscaledHeight);
// prep
var g:Graphics = this.graphics;
var fgColor:int = this.getStyle("fillColor");
var bgColor:int = this.getStyle("backgroundFillColor");
var radius:int = this.getStyle("cornerRadius");
// clear
g.clear();
// draw background
g.beginFill(bgColor, 1);
g.drawRoundRect(0, 0, unscaledWidth, unscaledHeight, radius, radius);
g.endFill();
// draw fill level
if (this._fillLevel > 0) {
var fillHeight:int = int(unscaledHeight * this._fillLevel);
// extra component for drawing fill-level, so we can apply mask just to this
if (this._fillLevelCanvas == null) {
this._fillLevelCanvas = new Canvas();
this._fillLevelCanvas.x = 0;
this._fillLevelCanvas.y = 0;
this._fillLevelCanvas.includeInLayout = false;
this.addChildAt(this._fillLevelCanvas, 0);
}
this._fillLevelCanvas.width = unscaledWidth;
this._fillLevelCanvas.height = unscaledHeight;
// mask
if (this._fillLevelMask == null) {
this._fillLevelMask = new Canvas();
this._fillLevelMask.x = 0;
this._fillLevelMask.y = 0;
this._fillLevelCanvas.addChild(this._fillLevelMask);
this._fillLevelCanvas.mask = this._fillLevelMask;
}
this._fillLevelMask.width = this.width;
this._fillLevelMask.height = this.height;
this._fillLevelMask.graphics.beginFill(0xFFFFFF);
this._fillLevelMask.graphics.drawRect(0, this.height-fillHeight, this._fillLevelMask.width, this._fillLevelMask.height);
this._fillLevelMask.graphics.endFill();
this._fillLevelCanvas.graphics.beginFill(fgColor, 1);
this._fillLevelCanvas.graphics.drawRoundRect(0, 0, unscaledWidth, unscaledHeight, radius, radius);
this._fillLevelCanvas.graphics.endFill();
}
}
, dass Links nicht für mich arbeiten, vielleicht meinen Sie diesen Thread: http://forums.adobe.com/message/47864 # 47864 – Tom