FLEX 3.0 虚线边框

本文共两个文件:DashBorderExample.mxml 和 DashBorder.as

1、DashBorderExample.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
   
    <mx:VBox x="50" y="50" width="200" height="200" borderThickness="1" borderColor="#00FF00" borderSkin="DashBorder"/>
    <mx:Panel x="300" y="50" width="200" height="200" borderThickness="5" borderColor="#FF00FF" borderSkin="DashBorder"/>
    <mx:Canvas x="550" y="50" width="200" height="200" borderThickness="1" borderColor="#FF0000" borderSkin="DashBorder"/>
    <mx:VBox x="800" y="50" width="200" height="200" borderThickness="5" borderColor="#00FFFF" borderSkin="DashBorder"/>
   
</mx:Application>

2、DashBorder.as

package{
import mx.core.UIComponent;

public class DashBorder extends UIComponent{
     private var dashlen:Number = 5;    //单点长度
     private var gaplen:Number = 55;    //两点间隔
    
     public function DashBorder(){
         super();
     }
   
     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
         super.updateDisplayList(unscaledWidth, unscaledHeight);
         var borderThickness:int = getStyle("borderThickness");
         var borderColor:int = getStyle("borderColor");
         graphics.clear();
         graphics.lineStyle(borderThickness, borderColor, 1);
         if(getStyle("dashlen")){
             this.dashlen = getStyle("dashlen");
         }
         if(getStyle("gaplen")){
             this.gaplen = getStyle("gaplen");
         }
         drawBorder(this.x, this.y, unscaledWidth, unscaledHeight, this.dashlen, this.gaplen);
     }
   
     private function drawBorder(x1:Number, y1:Number, width:Number, height:Number, dashlen:Number, gaplen:Number):void{
         drawLine(x1, y1, x1 + width, y1, dashlen, gaplen);
         drawLine(x1 + width, y1, x1 + width, y1 + height, dashlen, gaplen);
         drawLine(x1 + width, y1 + height, x1, y1 + height, dashlen, gaplen);
         drawLine(x1, y1 + height, x1, y1, dashlen, gaplen);
     }
    
     public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, dashlen:Number, gaplen:Number):void{   
         if((x1 != x2) || (y1 != y2)){
          var incrlen:Number = dashlen + gaplen;
          var len:Number = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
          var angle:Number = Math.atan((y2 - y1) / (x2 - x1));
          var steps:uint = len / (dashlen + gaplen);
          var dashstepx:Number = dashlen * Math.cos(angle);
          if(x2 < x1){
              dashstepx *= -1;
          }
          var dashstepy:Number = dashlen * Math.sin(angle);
          var gapstepx:Number = gaplen * Math.cos(angle);
          if (x2 < x1){
              gapstepx *= -1;
          }
          var gapstepy:Number = gaplen * Math.sin(angle);
          var stepcount:uint = 0;
          while((stepcount++) < steps){      
              var dashstartx:Number;
              var dashstarty:Number;
              var dashendx:Number;
              var dashendy:Number;
              if(x1 == x2 && y1 != y2){
                  dashstartx = dashendx = x1;
                  if(y2 > y1){
                      dashstarty = y1 + ((stepcount-1) * (dashlen + gaplen));            
                      dashendy = dashstarty + dashlen;
               }else{
                   dashstarty = y1 - ((stepcount-1) * (dashlen + gaplen));            
                   dashendy = dashstarty - dashlen;
               }
            }else if(y1 == y2 && x1 != x2){
                dashstarty = dashendy = y1;
                if(x2 > x1){
                    dashstartx = x1 + ((stepcount-1) * (dashlen + gaplen));
                    dashendx = dashstartx + dashlen;
                }else{
                    dashstartx = x1 - ((stepcount-1) * (dashlen + gaplen));
                       dashendx = dashstartx - dashlen;
                   }
               }
               graphics.moveTo(dashstartx, dashstarty);
               graphics.lineTo(dashendx, dashendy);
          }
      }
     }
    
   }
}

转载于:https://www.cnblogs.com/liuzhong/archive/2011/08/09/2132474.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值