`
darrenzhu
  • 浏览: 804671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex中的虚线框(dotted or dashed border for flex)

阅读更多
DashBorder class
package
{
  import mx.core.UIComponent;
  
  public class DashBorder extends UIComponent{
    private var dashlen:Number = 5;
    private var gaplen:Number = 5;
    
    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");
      var backgroundColor:int = getStyle("backgroundColor");
      var backgroundAlpha:Number = getStyle("backgroundAlpha");

      graphics.clear();

      graphics.beginFill(backgroundColor, backgroundAlpha);
      graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);

      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); 
    }

    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);
        }
      }
    }
    
    private function drawBorder(x1:Number, y1:Number, width:Number, height:Number,
      dashlen:Number, gaplen:Number) : void {
		var borderSides:String = getStyle("borderSides");			
		if (borderSides != "left top right bottom")
		{
			// Adjust metrics based on which sides we have				
			if (borderSides.indexOf("left") != -1){
				drawLine(x1, y1 + height, x1, y1, dashlen, gaplen);
			}
			if (borderSides.indexOf("top") != -1){
				drawLine(x1, y1, x1 + width, y1, dashlen, gaplen);
			}
			if (borderSides.indexOf("right") != -1){
				drawLine(x1 + width, y1, x1 + width, y1 + height, dashlen, gaplen);
			}
			if (borderSides.indexOf("bottom") != -1){
				drawLine(x1 + width, y1 + height, x1, y1 + height, dashlen, gaplen);
			}
		}     
    }    
  }
}



Usage example:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  verticalGap="20" backgroundGradientColors="0xFFFFFF, 0xFFFFFF"
  backgroundColor="0xFFFFFF" viewSourceURL="srcview/index.html">
  <mx:Script>
    <![CDATA[
      [Bindable] private var numValid:uint = 0;
      
      private function applyStyles():void{
        nv.validate(dash.text);
        nv.validate(gap.text);
        nv.validate(thickness.text);
        if(numValid == 3){
          var myBorderStyle:CSSStyleDeclaration = 
            new CSSStyleDeclaration('myBorderStyle');
          myBorderStyle.setStyle('dashlen', Number(dash.text));          
          myBorderStyle.setStyle('gaplen', Number(gap.text));          
          myBorderStyle.setStyle('borderThickness', Number(thickness.text));
          StyleManager.setStyleDeclaration("DashBorder", myBorderStyle, true);
        }
        numValid = 0;          
      }
    ]]>
  </mx:Script>
  <mx:NumberValidator id="nv" allowNegative="false" domain="real" valid="numValid++;" 
    invalid="mx.controls.Alert.show('ERROR: dash length, gap length, and border thickness must be (positive) numbers.');"/> 
  <mx:Form label="Choose Dashed Border Properties">
    <mx:FormItem label="Dash Length">
      <mx:TextInput id="dash" width="100" text="5"/>
    </mx:FormItem>
    <mx:FormItem label="Gap Length">
      <mx:TextInput id="gap" width="100" text="5"/>
    </mx:FormItem>
    <mx:FormItem label="Border Thickness">
      <mx:TextInput id="thickness" width="100" text="1"/>
    </mx:FormItem>
    <mx:FormItem>
      <mx:Button id="apply" label="Apply Styles"
        click="applyStyles()"/>
    </mx:FormItem>
  </mx:Form>
  <mx:VBox id="vb" borderSkin="DashBorder" width="250" height="20" 
    borderColor="0xFF0000"
    backgroundColor="0xFFFFFF" borderSides="bottom"
    horizontalAlign="center" verticalAlign="middle">
  </mx:VBox>
	
	<mx:VBox borderStyle="solid" borderSides="bottom" width="250" height="20"/>
</mx:Application>
分享到:
评论

相关推荐

    border虚线样式,带颜色

    要创建虚线边框,我们可以将border-style设置为'dashed'或'dotted'。例如: ```css element { border-style: dashed; /* 虚线边框 */ } ``` 如果你想要一个点状的虚线,可以使用'dotted': ```css element { ...

    Flutter-Dotted-Border:Flutter软件包,可轻松在小部件周围添加虚线边框

    要使用此包,请在您的pubspec.yaml文件中将dotted_border添加为依赖pubspec.yaml 。 用法 将DottedBorder小部件包裹在子小部件周围 DottedBorder ( color : Colors .black, strokeWidth : 1 , child : ...

    css border 虚线的使用方法.docx

    在本文中,我们将详细介绍 CSS border 虚线的使用方法。 什么是 CSS border 虚线 CSS border 虚线是一种特殊的边框样式,它由虚线组成,相比于实线边框,可以更加灵活地用于突出显示元素或将元素分组。虚线边框...

    border虚线样式(style)

    虚线边框的创建主要通过设置`border-style`属性为`dashed`或`dotted`。`dashed`用于创建虚线边框,而`dotted`则用于创建点状边框。以下是一个基本示例: ```css element { border-style: dashed; } ``` 在这个...

    border虚线(带你了解冷门却实用的特性)

    `border-style`接受多种预定义的值,如`solid`(实线)、`dashed`(虚线)和`dotted`(点线)。要创建虚线边框,只需要将`border-style`的值设置为`dashed`即可。例如: ```css div { border-style: dashed; } ```...

    解决移动端border问题 可定义任意单边框到全边框、圆角、虚线以及分割线等样式.zip

    3. **虚线边框**:`border-style`属性允许我们定义边框样式,如`solid`(实线)、`dashed`(虚线)和`dotted`(点状线)。例如,`border: 1px dashed black;`将创建一个1像素宽的黑色虚线边框。若只想改变某一边的...

    CSS border.docx CSS border.docx

    border-style 属性的值可以是 none、hidden、dotted、dashed、solid、double、groove、ridge、inset、outset、initial 或 inherit。 1. none: 定义无边框。 2. hidden: 与 "none" 相同,不过应用于表时除外,对于表...

    CSS dashed和dotted的区别

    最近的一个页面中碰到的,本来想用 border 来模拟设计图的虚线效果,但是很明显 border 效果不如设计图来的好看。顺便研究了下 dashed 和 dotted 的区别。 首先,从字面上来理解,dashed 和 dotted 都是指“虚线”,...

    css_实现虚线_CSS

    border-style: dotted; /* 在大屏幕设备上的虚线边框样式 */ } } ``` ### 总结 CSS提供多种方式来实现虚线边框,从简单的`border-style`属性到更复杂的`border-image`和伪元素。理解并熟练运用这些技术,可以...

    CSS border虚线边框属性教程

    在CSS中,要设置虚线边框,我们需要使用border-style属性并将值设置为"dashed"。例如: ```css #box { border-style: dashed; } ``` 然而,在本教程中,我们将更深入地学习如何使用边框属性创建不同形状和效果的...

    HTML5&CSS3网页制作:边框属性.pptx

    * dashed:虚线 * dotted:点线 * double:双实线 边框宽度(border-width)属性值: * 数值(以像素为单位):设置边框的宽度 * auto:自动设置边框宽度 边框颜色(border-color)属性值: * 颜色名称(如:red...

    纯CSS 做的虚线表格

    要创建虚线边框,我们将设置`border-style`为`dashed`或`dotted`。例如: ```css table { border-collapse: collapse; /* 使单元格之间的边框合并 */ } td, th { border: 1px dashed gray; /* 设置单元格边框为...

    XML应用开发(软件品牌)-1期 4.8 案例分析-使用CSS容器属性显示XML文档-边框属性border.doc

    - `dashed`:虚线边框 - `solid`:实线边框 - `double`:双线边框 - `groove`:槽形边框 - `ridge`:脊形边框 - `inset`:内嵌边框 - `outset`:外凸边框 2. **边框宽度 `border-width`** - `border-width`...

    设置对象边框PPT学习教案.pptx

    `border-style`属性用于定义边框的外观,可以选择如`none`、`dotted`、`dashed`、`solid`、`double`、`groove`、`ridge`、`inset`或`outset`等不同值。边框样式是边框复合属性的一部分,与边框颜色和边框宽度共同...

    HTML表格标记教程(48):CSS修饰表格

    3. 虚线框表格:修改border-style属性,使用dashed。例如,table样式为border: black dashed; border-width: 1 0 0 1,td样式为border: black dashed; border-width: 0 1 1 0。 4. 点线边框表格:使用dotted样式,...

    Html_的table_边框设置

    - **`border-style`**:定义边框的样式,如实线(`solid`)、虚线(`dashed`)等。 - **`border-color`**:定义边框的颜色。 #### 三、基本边框设置 ##### 1.1px表格 - **定义**:为了制作一个简单的1px表格,只...

    css-border-effects.zip

    3. **边框风格**:`border-style`属性允许设置不同的边框样式,如`solid`(实线)、`dashed`(虚线)、`dotted`(点状线)、`double`(双线)等。 4. **边框简写属性**:为了简化代码,可以使用`border`属性一次性...

    CSS——border基础知识.docx

    - `dashed`:虚线边框 - `solid`:实线边框 - `double`:双线边框 - `groove`:根据`border-color`创建3D凹槽效果 - `ridge`:根据`border-color`创建3D凸起效果 - `inset`:根据`border-color`创建3D内嵌效果 - `...

    详解HTML设置边框的三种方式

    border-width: 1px 2px ...第二个是边框的样式 solid 实线 dashed 虚线 dotted 点画线 (不兼容 在不同的浏览器上显示的不一样) 第三个是边框的颜色 red 直接用英文单词表示颜色 #f00 颜色的十六进制表示法 rgb(255,0

Global site tag (gtag.js) - Google Analytics