zoukankan      html  css  js  c++  java
  • Adobe Flex迷你教程 — 让Graphics的线响应事件。

         查看flex的画线工具Garphics类的 API,我们知道Garphics不是直接new的,在flex的很多容器中比如BorderContainer中都有它的引用, 这样我们也可以绘制出许多优美的线条。但是,现在需求来了:
         1.在一个页面上有许多网络设备,我们需要用线条把他们连接起来组成网络拓扑图。
         2.对于不同的设备直接的连线显示不同的样式。
         3.对于不同的设备直接的连线显示不同的toolTip;
         很显然,就2.3需求BorderContainer很不满足的,那么我们对它进行包装来满足我们的需求,我原本的设计是这样的:
     index.mxml 程序  是个Appliction程序,是视图的主入口,调用 VisualGraph,把itemrander设置到 VisualGraph
     VisualGraph extends  UIComponent;  用来集成所有的线。有三个两个比较重要的方法
            method: public function set dataProvider(graph:XML):void //提供一个每根线的信息
                           {
                                    if(graph){
                        for each(var edge:XML in graph.Edge)    
                        {
                            createVNodeComponent(edge);
                        }
                   
                      }
                           public function set itemRenderer(ifac:IFactory):void
                           protected function createEdgeComponent(edge:XML):UIComponent//创建每根线
                          EdgeItemRenderer  extends IDataRenderer  ,是每根线的显示对象,在主程序中会把这个renderer设置到VisualGraph
      好了,意淫归意淫,今晚,我没有安照上面的逻辑封装。仅仅为了测试今天的主题是否可行,测试还算成功。但明天的项目设计,还是得遵循oop的思想好好按刚才的想法封装,保证易扩展,易维护。
     
     
     主程序index.mxml
     
    <?xml version="1.0"?>
    <!--
    * Created with IntelliJ IDEA.
    * User: DongYang
    * Date: 13-3-13
    * Time: 下午21:30
    * Progress every day a little more -->
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                  xmlns:s="library://ns.adobe.com/flex/spark"
                  xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)">
       <mx:Canvas id="canvas" width="100%" height="100%"/>
       <fx:Script><![CDATA[
           import Renderers.edgeRenderers.EdgeItemRenderer;
           import flashx.textLayout.container.ScrollPolicy;
           import mx.core.IDataRenderer;
           import mx.core.UIComponent;
           import mx.events.FlexEvent;
           private function creationCompleteHandler(event:FlexEvent):void {
               var edgeLayer:Canvas = new Canvas();
               edgeLayer.clipContent = false;
               edgeLayer.horizontalScrollPolicy = ScrollPolicy.OFF;
               edgeLayer.verticalScrollPolicy = ScrollPolicy.OFF;
               edgeLayer.percentWidth = 100;
               edgeLayer.percentHeight = 100;
               canvas.addChild(edgeLayer);
               for (var i:int = 1; i < 10; i++) {
                   var mycomponent:UIComponent;
                   mycomponent = new EdgeItemRenderer();
                   (mycomponent as IDataRenderer).data = i * 20;
                   mycomponent.addEventListener(MouseEvent.CLICK, mycomponent_clickHandler);
                   edgeLayer.addChild(mycomponent);
               }
           }

           private function mycomponent_clickHandler(event:MouseEvent):void {
               trace("hello line", (event.target as IDataRenderer).data);
           }
           ]]></fx:Script>
    </s:Application>
    ActionScript 3语言: EdgeItemRenderer.as
     
    /**
    * Created with IntelliJ IDEA.
    * User: DongYang
    * Date: 13-3-13
    * Time: 下午22:30
    * Progress every day a little more.
    */
    package Renderers.edgeRenderers {
    import spark.components.supportClasses.ItemRenderer;

    public class EdgeItemRenderer extends ItemRenderer {
       public function EdgeItemRenderer() {
       }


       override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
           super.updateDisplayList(unscaledWidth, unscaledHeight);
           this.graphics.clear();
           draw();
       }

       public function draw():void {
           this.graphics.beginFill(0xFF0000, 1);
           this.graphics.lineStyle(2, 0xFF0000, 1);
           this.graphics.moveTo(10, this.data as int);
           this.graphics.lineTo(100, this.data as int);

       }


    }
    }
       sudgeItemRenderer.as
  • 相关阅读:
    【日语】标日初级上册单词(5-8)1
    【日语】标日初级上册单词(1-4)1
    【日语】计算机日语
    百家姓日语
    【日语】动物名称日语单词集合
    【日语】日语常用会话1000句
    【日语】编程相关日语词汇
    【日语】日语N5学习
    【日语】日语新闻核心词汇
    使用uni-app开发微信小程序之登录模块
  • 原文地址:https://www.cnblogs.com/yangpigao/p/2958496.html
Copyright © 2011-2022 走看看