`
darrenzhu
  • 浏览: 785857 次
  • 性别: 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>
分享到:
评论

相关推荐

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

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

    CSS dashed和dotted的区别

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

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

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

    浅析css中使用border属性与display属性的方法

    border属性介绍 border属性设置元素边框。 边框3个要素如:粗细、线型、颜色。 边框线型属性值说明表如:      属性指 描述 none 定义无边框。 hidden 与 none 相同。不过应用于表时除外,对于表,...

    CSS border-style 属性使用方法

    border-style — 定义边框的样式 取值:&lt;border&gt;{1,4} | inherit...border-style的取值 none: 无样式 hidden: 除了同表格的边框发生冲突的时候,其它同none dotted: 点划线 dashed: 虚线 solid: 实线 double: 双线,两条线

    flexblog::dotted_six-pointed_star:Site para treinar os conceitos flex do CSS3,criado no curso da Origamid

    •• • • • :movie_camera: Demonstração :laptop_computer: 清醒Site para treinar os conceitos flex do CSS3,criado no curso da Origamid。 :memo: 罗泰罗视觉集团埃斯塔多塔雷法 :hammer: 牙痛症由于铸铁...

    精彩绝伦CSS2

    dashed: 虚线; solid: 实线; double: 双线,两条线加上中间的空白等于border-width的取值; groove: 槽状; ridge: 脊状,和groove相反; inset: 凹陷; outset:凸出,和inset相反; 其中groove、ridge、...

    CSS 边框

    CSS 边框 ...dashed: 定义一个虚线边框   solid: 定义实线边框   double: 定义两个边框。 两个边框的宽度和 border-width 的值相同   groove: 定义3D沟槽边框。效果取决于边框的颜色值   ridge:

    Dotted-Version-Vectors, 最终一致性系统的逻辑时钟.zip

    Dotted-Version-Vectors, 最终一致性系统的逻辑时钟 点矢量集使用因果关系管理值费费博士Dotted版本向量集与版本向量( 。某些矢量时钟) 类似,但是防止在版本向量中出现 false 冲突。 它还拥有更完整的API,更适合于...

    Android-dotted-progress-bar-一个小清新的进度条

    dotted-progress-bar - 一个小清新的进度条

    Python库 | dotted_dict-1.0.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:dotted_dict-1.0.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    根据分辨率不同,调用不同的css文件

     BORDER-BOTTOM: #cccccc 1px dotted” cellSpacing=0 cellPadding=6 width=”95%” align=center border=0&gt; [removed] &lt;!– if (window.navigator.userAgent.indexOf(“MSIE”)&gt;=1) { var IE...

    CSS教程:关于网页图片的属性

    ①dashed:虚线②dotted:点虚线③solid:实线④double:双线 ⑤groove:沟槽状⑥ridge:脊状⑦inset:内嵌⑧outset:外嵌 CSS TP特殊效果风格属性 ①灰/黑:Gray/Xray②差值:Invert③水平:Fliph ④垂直:Flipv ⑤...

    CSS3带阴影动画效果的手绘卡通风格按钮特效.zip

    &lt;...  &lt;meta name="viewport" content="width=device-width, initial-... CSS3实现带阴影动画效果的手绘卡通按钮特效,它们以手绘涂鸦的方式,以不同的按钮边框线条宽度和虚线来构成按钮,共有6种不同的效果。

    利用CSS3实现圆角的outline效果的教程

    其次,支持的属性值几乎都是一样的,例如,outline-style和border-style值dotted, dashed, solid, …之类的,一些语法也几乎一样。如果这都不算近亲,你让绝对定位和浮动何言以对。 2. IE8+支持outline严格来讲属于...

    CSS样式风格定义

    水平条虚线效果定义一border:1px dashed #86BCD4; height: 1; 水平条虚线效果定义二align: center;width: 100%;height: 1;color: #86BCD4;Shade:no;SIZE=1; 水平条实线无阴影效果定义*/hr{border:1px dashed #86BCD...

    css的border和clear属性使用方法和示例

    大家可以再次参考手册,然后你就能明白dashed、solid、dotted…等的作用,利用它们你可以制作出许多效果来,实线、虚线、双线、阴影线等等。 复制代码代码如下:”banner”&gt; 以上代码便可以实现设计草图中的banner,...

    兼容ie ff div 层 打开+关闭+ 拖动+遮罩+移动+动画改变高宽

    1 拖动+遮罩+移动+改变元素大小 ...border:1px dotted red; border:1px dashed green;} #odiv ul{ list-style:none; text-align:left; width:150px; font-size:11px;} #odiv ul li{height:25px; line-height

Global site tag (gtag.js) - Google Analytics