Hier ein kurzes Beispiel, wie man Buttons mit Degrafa gestalten kann. Das Ergebnis ist ein Button im iPhone-Stil mit Glaseffekt. Das Beispiel wurde in Flex erstellt und zeigt, wie man ein Skin für eine Schaltfläche anlegt.
Applikation und Stylesheet
Die Hauptanwendung platziert lediglich einen Button, der auf der Bühne dargestellt wird.
-
...
-
<mx:Style source="style.css"/>
-
-
<mx:Button id="loaderButton" label="Demo"
-
verticalCenter="0" horizontalCenter="0"
-
height="100" width="200" />
-
-
</mx:Application>
Außerdem wird in der Anwendung ein CSS-Stylesheet integriert. Dieses sorgt dafür, dass für alle Komponenten des Typs Button die Eigenschaft skin auf die Klasse skins.MySkin referenziert. Dadurch wird das Aussehen festgelegt.
-
Button {
-
skin: ClassReference('skins.MySkin');
-
...
-
}
Degrafa: Gestaltung des Buttons
Im Unterverzeichnis "skins" liegt die Klasse MySkin (deshalb auch skins.MySkin im Stylesheet). Hier kommt nun Degrafa zum Einsatz.
Zu Beginn werden vier Füllungen festgelegt. Die ersten drei Farbverläufe sind für die Buttonzustände "normal" (Up), "Mouseover" (Over) und "gedrückt" (Down). Diese unterscheiden sich durch ihre Grundfarbe. Der vierte Farbverlauf ist ein weißes Rechtecks, das in jedem Buttonzustand als Fülleffekt für den Glanzreflex genutzt wird.
Danach werden die verschiedenen Buttonzustände definiert und gezeichnet. Dabei wird jeweils der eigentliche Button und der Glanzeffekt in Form eines RoundedRectangleComplex verwendet.
Zuletzt wird noch ein Glow-Filter als Effekt eingesetzt.
Demo
Zuerst das Degrafa-Beispiel zum Anschauen:
-
<?xml version="1.0" encoding="utf-8"?>
-
<GraphicBorderSkin
-
xmlns:mx="http://www.adobe.com/2006/mxml"
-
xmlns="http://www.degrafa.com/2007"
-
xmlns:filters="flash.filters.*"
-
>
-
<mx:Script>
-
<![CDATA[
-
[Bindable]
-
private var awidth:Number=0;
-
-
[Bindable]
-
private var aheight:Number=0;
-
-
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
-
super.updateDisplayList(unscaledWidth, unscaledHeight);
-
awidth = unscaledWidth;
-
aheight = unscaledHeight;
-
}
-
]]>
-
</mx:Script>
-
-
<!-- Füllungen -->
-
<fills>
-
<!-- schwarzer Farbverlauf -->
-
<LinearGradientFill id="schwarzerGradient" angle="90">
-
<GradientStop color="#000000" alpha="1"/>
-
<GradientStop color="#222222" alpha="1"/>
-
</LinearGradientFill>
-
-
<!-- roter Farbverlauf -->
-
<LinearGradientFill id="roterGradient" angle="90">
-
<GradientStop color="#720205" alpha="1"/>
-
<GradientStop color="#4C0002" alpha="1"/>
-
</LinearGradientFill>
-
-
<!-- blauer Farbverlauf -->
-
<LinearGradientFill id="blauerGradient" angle="90">
-
<GradientStop color="#004460" alpha="1"/>
-
<GradientStop color="#002F44" alpha="1"/>
-
</LinearGradientFill>
-
-
<!-- weißer Farbverlauf für Reflektion auf Button -->
-
<LinearGradientFill id="shine" angle="90">
-
<GradientStop color="#FFFFFF" alpha=".6"/>
-
<GradientStop color="#FFFFFF" alpha=".3"/>
-
</LinearGradientFill>
-
</fills>
-
-
<!-- Formen -->
-
<geometry>
-
<!-- Normalzustand des Buttons (UP) -->
-
<GeometryComposition state="upSkin">
-
<!-- Button -->
-
<RoundedRectangleComplex
-
id="mainRect"
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="11" bottomRightRadius="11"
-
fill="{schwarzerGradient}"
-
height="{aheight}" width="{awidth}"/>
-
-
<!-- weiße Reflektion -->
-
<RoundedRectangleComplex
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="6" bottomRightRadius="6"
-
fill="{ shine }"
-
x="1" y="1" height="{ mainRect.height/2 }" width="{awidth - 2}"/>
-
</GeometryComposition>
-
-
<!-- Mouse Over des Buttons (OVER) -->
-
<GeometryComposition state="overSkin">
-
<RoundedRectangleComplex
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="11" bottomRightRadius="11"
-
fill="{roterGradient}"
-
height="{aheight}" width="{awidth}"/>
-
-
<!-- weiße Reflektion -->
-
<RoundedRectangleComplex
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="6" bottomRightRadius="6"
-
fill="{ shine }"
-
x="1" y="1" height="{ mainRect.height/2 }" width="{awidth - 2}"/>
-
</GeometryComposition>
-
-
<!-- Gedrücktzustand des Buttons (DOWN) -->
-
<GeometryComposition state="downSkin">
-
<RoundedRectangleComplex
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="11" bottomRightRadius="11"
-
fill="{blauerGradient}"
-
height="{aheight}"
-
width="{awidth}"/>
-
<!-- weiße Reflektion -->
-
<RoundedRectangleComplex
-
topLeftRadius="11" topRightRadius="11" bottomLeftRadius="6" bottomRightRadius="6"
-
fill="{ shine }"
-
x="1" y="1" height="{ mainRect.height/2 }" width="{awidth - 2}"/>
-
</GeometryComposition>
-
</geometry>
-
-
<!-- Filter -->
-
<filters>
-
<filters:GlowFilter
-
color="#FFFFFF"
-
alpha=".5"
-
blurX="10"
-
blurY="10"/>
-
</filters>
-
</GraphicBorderSkin>
Das Beispiel basiert auf einer Demonstration von Juan Sanchez, das auf dieser Degrafa-Webseite zu finden ist.
Download: Quelldateien (.zip)
Schreibe einen Kommentar