<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術(shù)

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    TWaver定制流動的link

    Posted on 2011-09-16 15:45 TWaver 閱讀(2585) 評論(2)  編輯  收藏

    TWaver的連線默認支持流動效果,設(shè)置連線的流動屬性為true,以及流動顏色,方向,寬度等,就可以出現(xiàn)下面間隔顏色的流動效果。
    默認連線流動效果

    link流動設(shè)置代碼:

    1Link flowingLink = new Link(node, node);
    2flowingLink.putLinkFlowing(true);
    3flowingLink.putLinkFlowingColor(Color.BLUE);
    4flowingLink.putLinkFlowingWidth(5);
    5flowingLink.putLinkWidth(5);
    6flowingLink.putLinkAntialias(true);

     

    默認連線流動效果:


    定制連線流動效果

    默認的效果總是滿足不了客戶豐富的實際需求,最近就遇到有客戶提這樣的需求,link上方出現(xiàn)一排流動的點表示信息流,點之間的間隙代表流動的速度,如下示意圖:


    分析難點,與默認流動效果相比有三處區(qū)別:一是流動的圖形是點,而不是色塊,二是間距要可設(shè)置,三是繪制位置在link上方,而不是和link疊在一起。遇到問題解決問題,程序員的神奇之處就是簡單的幾行代碼,就能讓不懂代碼的mm對你佩服不已,這個問題的解決也是如此,通過對stroke的設(shè)置和sin,cos的使用輕松化解了問題難點。

  • 定義CustomFlowingLink和CustomFlowingLinkUI類

    首先這個問題是需要擴展LinkUI的,按照定制ElementUI的方法,擴展一個CustomFlowingLink類,以及對應(yīng)的ui類CustomFlowingLinkUI,如下:

     1public static class CustomFlowingLink extends Link{
     2    public CustomFlowingLink(){
     3        super();
     4        this.init();
     5    }

     6
     7    public CustomFlowingLink(Object id){
     8        super(id);
     9        this.init();
    10    }

    11
    12    public CustomFlowingLink(Node node1, Node node2) {
    13        super(node1, node2);
    14        this.init();
    15    }

    16
    17    private void init(){
    18        this.putLinkFlowing(true);
    19        this.putLinkFlowingColor(Color.RED);
    20        this.putLinkAntialias(true);
    21    }

    22
    23    @Override
    24    public String getUIClassID() {
    25        return CustomFlowingLinkUI.class.getName();
    26    }

    27}

    28
    29public static class CustomFlowingLinkUI extends LinkUI{
    30    CustomFlowingLink link;
    31    public CustomFlowingLinkUI(TNetwork network, CustomFlowingLink link) {
    32        super(network, link);
    33        this.link = link;
    34    }

    35}

     

    上面的代碼通過重寫Link#public String getUIClassID()方法,使CustomFlowingLink與CustomFlowingLinkUI關(guān)聯(lián),其中CustomFlowingLink構(gòu)造寒函數(shù)中設(shè)置了該連線為流動樣式,并設(shè)置了流動顏色。注意上面構(gòu)造函數(shù)的重寫,例如CustomFlowingLink必須實現(xiàn)不帶參數(shù)的默認構(gòu)造函數(shù),以及帶id參數(shù)的構(gòu)造函數(shù),這樣擴展的連線類型才能夠同TDataBox導(dǎo)出導(dǎo)入xml。

  • 增加控制點間距和偏離距離的屬性

    接下來我們增加兩個屬性,flowingGap,flowingOffset分別用來控制點間距和偏離連線的距離,如下:

     1public static class CustomFlowingLink extends Link{
     2    int flowingGap = 10;
     3    int flowingOffset = 10;
     4
     5    public int getFlowingGap() {
     6        return flowingGap;
     7    }

     8
     9    public void setFlowingGap(int flowingGap) {
    10        this.flowingGap = flowingGap;
    11        this.updateUI();
    12    }

    13
    14    public int getFlowingOffset() {
    15        return flowingOffset;
    16    }

    17
    18    public void setFlowingOffset(int flowingOffset) {
    19        this.flowingOffset = flowingOffset;
    20        this.updateUI();
    21    }

    22               
    23       }

     

    定制流動繪制邏輯

    下面定制繪制邏輯,這里重寫了LinkUI的public void paintBody(Graphics2D g2d)方法,另外在連線的上方繪制了一條點線
    重點是stroke的設(shè)置,這里我們詳細來解釋一下參數(shù):

     1public void paintBody(Graphics2D g2d) {
     2    super.paintBody(g2d);
     3        if(this.isFlowing()){
     4            g2d.setColor(this.getFlowingColor());//流動線顏色
     5            float[] dashPatten = new float[] {0, link.getFlowingGap()};
     6            Stroke dashStroke = new BasicStroke(
     7                this.getFlowingWidth(),//畫筆參數(shù),如果你需要更改點的大小,可以修改這個參數(shù)
     8                BasicStroke.CAP_ROUND,//線端點樣式為圓角,這樣一個點就會繪制成一個圓形
     9                BasicStroke.JOIN_ROUND,//線連接點樣式
    10                link.getFlowingGap(),//最小測量單位,這里取點間距
    11                dashPatten,//線樣式,{0, link.getFlowingGap()}就表示每間隔link.getFlowingGap()個像素繪制一個點
    12                this.getDashPhase());//起始位置,TWaver內(nèi)部會定時的修改這個值,使這條線流動起來
    13            g2d.setStroke(dashStroke);
    14            double offset = link.getFlowingOffset();
    15            double tx = Math.sin(this.linkAngle) * offset;
    16            double ty = -Math.cos(this.linkAngle) * offset;
    17            System.out.println(tx + " , " + ty);
    18            g2d.translate(tx, ty);
    19            g2d.draw(this.getPath());
    20            g2d.translate(-tx, -ty);
    21        }

    22}
    最終效果

    創(chuàng)建兩條連線,看看效果:

     1public static void main(String[] args) {
     2    TDataBox box = new TDataBox();
     3
     4    Node node1 = createNode(box, null100100);
     5    Node node2 = createNode(box, null200120);
     6    Node node3 = createNode(box, null100200);
     7    Node node4 = createNode(box, null200220);
     8
     9    CustomFlowingLink link1 = new CustomFlowingLink(node1, node2);
    10    CustomFlowingLink link2 = new CustomFlowingLink(node3, node4);
    11    link2.setFlowingGap(20);
    12    link2.setFlowingOffset(15);
    13
    14    box.addElement(link1);
    15    box.addElement(link2);
    16
    17    showFrame("Custom Flowing Link Demo"new TNetwork(box));
    18}

     

    效果圖:

     

    完整代碼請查看這里 

     

     

     


  • 評論

    # re: TWaver定制流動的link  回復(fù)  更多評論   

    2011-09-17 08:57 by tb
    分析得很不錯

    # re: TWaver定制流動的link  回復(fù)  更多評論   

    2011-09-22 20:54 by 相信
    cool

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 57pao国产成永久免费视频| 午夜高清免费在线观看| 亚洲图片校园春色| 成人午夜18免费看| 韩日电影在线播放免费版| 亚洲AV无码码潮喷在线观看| 国产精品69白浆在线观看免费 | 亚洲av中文无码乱人伦在线r▽| 18禁成人网站免费观看| 亚洲精品伦理熟女国产一区二区| 国产自偷亚洲精品页65页| 亚洲一区二区三区免费观看 | 日韩亚洲国产高清免费视频| 黄网站色成年片大免费高清| 久久久亚洲精品无码| 国产精品深夜福利免费观看| 99re6免费视频| 无码色偷偷亚洲国内自拍| 亚洲AV永久精品爱情岛论坛| 日韩高清在线免费看| 少妇太爽了在线观看免费视频| 久久亚洲欧美国产精品| 亚洲伦另类中文字幕| 国产成人免费一区二区三区| 精品免费久久久久久久| 国产精品玖玖美女张开腿让男人桶爽免费看 | 国产成人综合亚洲绿色| 亚洲色大成网站www永久| 亚洲国产中文字幕在线观看| 91成人免费观看网站| 国产成人精品免费久久久久| 无码日韩人妻AV一区免费l | 国产成人自产拍免费视频| 国产午夜亚洲精品国产| 亚洲欧洲国产精品你懂的| 亚洲国产精品无码久久久久久曰| 妞干网免费视频观看| 免费看片在线观看| 久久久久久久岛国免费播放| a一级毛片免费高清在线| 黄色a三级免费看|