博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flex的边框渐变
阅读量:5794 次
发布时间:2019-06-18

本文共 2704 字,大约阅读时间需要 9 分钟。

flex除了application支持背景渐变色外,其它控制都不支持,近日需要这个功能,在网上搜到些资料整理如下:

 

类文件

GradientBorder.as

Flex代码  
  1. /**  
  2.  * 背景渐变色  
  3.  * whisht  
  4.  * */  
  5. package {  
  6.       
  7.     import flash.display.*;  
  8.     import flash.geom.*;  
  9.     import flash.utils.*;  
  10.       
  11.     import mx.core.EdgeMetrics;  
  12.     import mx.skins.halo.HaloBorder;  
  13.     import mx.utils.ColorUtil;  
  14.     import mx.utils.GraphicsUtil;  
  15.       
  16.     public class GradientBorder extends HaloBorder   
  17.     {  
  18.           
  19.         private var topCornerRadius:Number;        // top corner radius  
  20.         private var bottomCornerRadius:Number;    // bottom corner radius  
  21.         private var fillColors:Array;            // fill colors (two)  
  22.         private var setup:Boolean;  
  23.           
  24.   
  25.         private function setupStyles():void  
  26.         {  
  27.             fillColors = getStyle("fillColors") as Array;  
  28.             if (!fillColors) fillColors = [0xFFFFFF0xFFFFFF];  
  29.               
  30.             topCornerRadius = getStyle("cornerRadius") as Number;  
  31.             if (!topCornerRadius) topCornerRadius = 0;      
  32.               
  33.             bottomCornerRadius = getStyle("bottomCornerRadius") as Number;  
  34.             if (!bottomCornerRadius) bottomCornerRadius = topCornerRadius;      
  35.           
  36.         }  
  37.           
  38.           
  39.         override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void  
  40.         {  
  41.             super.updateDisplayList(unscaledWidth, unscaledHeight);      
  42.               
  43.             setupStyles();  
  44.               
  45.             var g:Graphics = graphics;  
  46.             var b:EdgeMetrics = borderMetrics;  
  47.             var w:Number = unscaledWidth - b.left - b.right;  
  48.             var h:Number = unscaledHeight - b.top - b.bottom;  
  49.             var m:Matrix = verticalGradientMatrix(00, w, h);  
  50.           
  51.             g.beginGradientFill("linear", fillColors, [11], [0255], m);  
  52.               
  53.             var tr:Number = Math.max(topCornerRadius-20);  
  54.             var br:Number = Math.max(bottomCornerRadius-20);  
  55.               
  56.             GraphicsUtil.drawRoundRectComplex(g, b.left, b.top, w, h, tr, tr, br, br);  
  57.             g.endFill();  
  58.                   
  59.         }  
  60.           
  61.     }  
  62. }  

 

 

调用示例

Mxml代码  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   
  3.     layout="vertical" backgroundImage="" backgroundColor="white">  
  4.       
  5.     <mx:Style>  
  6.           
  7.         .gradient  
  8.         {  
  9.             border-style: solid;  
  10.             border-thickness: 0;  
  11.             border-skin: ClassReference("GradientBorder");  
  12.             fill-colors: #0099FF, #000099;  
  13.             corner-radius: 10;  
  14.             drop-shadow-enabled: true;  
  15.         }  
  16.           
  17.     </mx:Style>  
  18.       
  19.     <mx:Script>  
  20.         <![CDATA[  
  21.             private function changeStyle():void  
  22.             {  
  23.                 box.setStyle("fillColors", [col1.value, col2.value]);  
  24.                 box.setStyle("cornerRadius", corner.value);  
  25.             }  
  26.         ]]>  
  27.     </mx:Script>  
  28.       
  29.     <mx:VBox id="box" styleName="gradient" width="400" height="300" verticalAlign="middle" horizontalAlign="center">  
  30.         <mx:FormItem label="Color 1:">  
  31.             <mx:ColorPicker id="col1" change="changeStyle()" selectedColor="0x0099FF"/>  
  32.         </mx:FormItem>  
  33.         <mx:FormItem label="Color 2:">  
  34.             <mx:ColorPicker id="col2" change="changeStyle()" selectedColor="0x000099"/>  
  35.         </mx:FormItem>  
  36.         <mx:FormItem label="Corner radius:">  
  37.             <mx:HSlider id="corner" value="10" minimum="0" maximum="100" change="changeStyle()"/>  
  38.         </mx:FormItem>  
  39.     </mx:VBox>  
  40.       
  41. </mx:Application>  

转载于:https://www.cnblogs.com/programmer-wind/archive/2012/05/20/2919505.html

你可能感兴趣的文章
我的Java开发学习之旅------>使用循环递归算法把数组里数据数组合全部列出
查看>>
“PDF修改器 2.5.2.0[强大的免费PDF文件编辑软件]”乃是假冒软件
查看>>
一些有用的github收藏(持续更新中...)
查看>>
位操作
查看>>
关于hostapd的调试
查看>>
modsign: could't get uefi db list
查看>>
Firefly Mutil-Boot多系统安装启动程序发布
查看>>
20145240《Java程序设计》课程总结
查看>>
Python paramiko模块
查看>>
设计模式
查看>>
(不)扩展内置原型((Not) Augmenting Built-in Prototypes)
查看>>
W驱开技详.过滤驱动测试
查看>>
关于MATLAB处理大数据坐标文件201762
查看>>
递推练习 简单n!
查看>>
spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext...
查看>>
Android中解析XML
查看>>
关于 visual studio 扩展与更新 搜索不到qt的解决方案
查看>>
python3字典:获取json响应值来进行断言的用法详解
查看>>
010:DEBUG模式详解
查看>>
Django当中的sql查询
查看>>