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
  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/yangpigao/p/2958496.html
Copyright © 2011-2022 走看看