您的位置:首页 > 其它

Flex:Flex 给容器设置背景渐变(mx)

2011-06-24 23:22 363 查看
受到@大猫1977 新浪微博客户端的启发,终于可以把组件的背景色渐变一把了,下面看看样式是这样实现的吧。代码内容来自互联网,经稍微修改。

GradientBorder.as

/**
* 背景渐变色
* whisht
* */
package  Script{

import flash.display.*;
import flash.geom.*;
import flash.utils.*;

import mx.core.EdgeMetrics;
import mx.skins.halo.HaloBorder;
import mx.utils.ColorUtil;
import mx.utils.GraphicsUtil;

public class GradientBorder extends HaloBorder
{

private var topCornerRadius:Number;        // top corner radius
private var bottomCornerRadius:Number;    // bottom corner radius
private var fillColors:Array;            // fill colors (two)
private var setup:Boolean;

private function setupStyles():void
{
fillColors = getStyle("fillColors") as Array;
if (!fillColors) fillColors = [0xFFFFFF, 0xFFFFFF];

topCornerRadius = getStyle("cornerRadius") as Number;
if (!topCornerRadius) topCornerRadius = 0;

bottomCornerRadius = getStyle("bottomCornerRadius") as Number;
if (!bottomCornerRadius) bottomCornerRadius = topCornerRadius;

}

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);

setupStyles();

var g:Graphics = graphics;
var b:EdgeMetrics = borderMetrics;
var w:Number = unscaledWidth - b.left - b.right;
var h:Number = unscaledHeight - b.top - b.bottom;
var m:Matrix = verticalGradientMatrix(0, 0, w, h);

g.beginGradientFill("linear", fillColors, [1, 1], [0, 255], m);

var tr:Number = Math.max(topCornerRadius-2, 0);
var br:Number = Math.max(bottomCornerRadius-2, 0);

GraphicsUtil.drawRoundRectComplex(g, b.left, b.top, w, h, tr, tr, br, br);
g.endFill();

}

}
}


Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"  backgroundColor="#ffffff">

<mx:Style>

.box
{
border-style: solid;
border-thickness: 1;
border-skin:ClassReference("Script.GradientBorder");
fill-colors: #483D8B, #cd0002;
corner-radius: 10;
drop-shadow-enabled: false;
borderColor: #868397;
borderAlpha: 0.99;
roundedBottomCorners: true;
cornerRadius: 0;
<!--shadowDistance: 2;
shadowDirection: left;-->
}

</mx:Style>

<mx:Script>
<!--[CDATA[
private function changeStyle():void
{
box.setStyle("fillColors", [col1.value, col2.value]);
box.setStyle("cornerRadius", corner.value);
}
]]-->
</mx:Script>

<mx:VBox id="box" styleName="box" width="400" height="300" verticalAlign="middle" horizontalAlign="center">
<mx:FormItem label="Color 1:">
<mx:ColorPicker id="col1" change="changeStyle()" selectedColor="0x0099FF"/>
</mx:FormItem>
<mx:FormItem label="Color 2:">
<mx:ColorPicker id="col2" change="changeStyle()" selectedColor="0x000099"/>
</mx:FormItem>
<mx:FormItem label="Corner radius:">
<mx:HSlider id="corner" value="10" minimum="0" maximum="100" change="changeStyle()"/>
</mx:FormItem>
</mx:VBox>

</mx:WindowedApplication>


截图:



转摘请注明出处,谢谢!

原出处:http://www.cnblogs.com/sinbad/archive/2011/06/03/2072301.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: