Просмотр полной версии : Градиентный цвет бекграунда TitleWindow
NePridymal
26.02.2008, 18:17
Доброго времени суток. Собственно в заголовке вопрос...
Как сделать градиентный цвет бекграунда в компоненте TitleWindow?
Пока что ничего лучше чем подложить какой-нить канвас с программно-нарисованным градиентом - не придумал... Но такой вариант мне не очень нравится. Может есть стандартные способы какие-то, а то хелп что-то в этом вопросе помочь не может?
FlexOkeks
26.02.2008, 19:47
я нарисовал в компоненте так:
protected var _colors:Array = [0xFFFFF,0xFFCC00,0x00FFDD,0x000000];
protected var _alphas:Array = [1,1,1,1];
protected var _ratios:Array = [0,64,164,255];
protected var _gradientBox:Matrix = new Matrix();
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
_gradientBox.createGradientBox(unscaledWidth, unscaledHeight , 0, 0, 0);
drawRoundRect(0, 0, unscaledWidth, unscaledHeight, null, _colors, _alphas, _gradientBox, GradientType.LINEAR, _ratios);
}
хотя не совсем уверен что это правильно, рисовать прямо в updateDisplayList, но вроде сработало как и было нужно.
NePridymal
26.02.2008, 20:51
Та дело в том, что так в TitleWindow почему-то рисовать не хочет... Функция вызывается, а ничего не рисует... :(
FlexOkeks
27.02.2008, 17:13
Да не, он рисует, просто стайл backgroundAlpha по умолчанию 1.0 и он этот бэкграунд повер кладет, поэтому наших художеств и не видно. Возможно дело в этом, и надо поставить:
setStyle("backgroundAlpha", 0);
а как быть если я хочу нарисовать что-либо поверх бэкграунда?
создать спрайт в updateDisplayList и сделать addChild он не дает
import mx.core.FlexSprite;
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
var whiteBox:FlexSprite = new FlexSprite();
var g:Graphics = whiteBox.graphics;
g.beginFill(0xFFFFFF);
g.drawRect(0, 0, 100, 100);
g.endFill()
addChild(whiteBox);
}
FlexOkeks
28.02.2008, 14:26
создать спрайт в updateDisplayList и сделать addChild он не дает
и не должен давать, для добавления надо переписывать другой протектный метод createChildren, и кроме того иметь ввиду, что непосредственно в панель или другой контейнер добавлять спрайты нельзя, можно только UIComponent или его наследников.
вот все хотел реализовать такой highlight как во Flex Style Explorer (http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html)
http://forum.udmnet.ru/photo/albums/userpics/111038/7c6922b4.jpg
<?xml version="1.0" encoding="utf-8"?>
<mx:ApplicationControlBar xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
private var white:UIComponent;
private var box:Sprite;
private var masked:Sprite;
private var g:Graphics;
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var radius:Number = getStyle("cornerRadius");
var hei:Number = 7;
g = box.graphics;
g.clear();
g.beginFill(0xFFFFFF);
g.lineTo(0, hei);
g.curveTo(unscaledWidth/2, hei+5, unscaledWidth, hei);
g.lineTo(unscaledWidth, 0);
g.endFill();
g = masked.graphics;
g.clear();
g.beginFill(0xFF0000);
g.drawRoundRectComplex(0, 0, unscaledWidth, box.height<radius ? radius : box.height, radius, radius, 0, 0);
g.endFill();
}
override protected function createChildren():void {
super.createChildren();
if (!white){
white = new UIComponent();
white.y = 1;
white.alpha = .1;
box = new Sprite();
masked = new Sprite();
box.mask = masked;
white.addChild(box);
white.addChild(masked);
rawChildren.addChild(white);
}
}
]]>
</mx:Script>
</mx:ApplicationControlBar>
CSS
ApplicationControlBar {
paddingLeft: 10;
paddingRight: 10;
paddingTop: 10;
paddingBottom: 10;
highlightAlphas: 0, 0;
backgroundColor: #a5b5be;
backgroundAlpha: 1;
cornerRadius: 10;
shadowDistance: 2;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.