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

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

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

    筆頭。。
    實踐啟示
    posts - 14,comments - 3,trackbacks - 0
    動畫的實現(xiàn)上來說,是設置定時器進行刷新.
    對于Swing程序來說java.swing.Timer類保證了線程在swing調(diào)用上的安全性。通過時間參數(shù)的設置時間動態(tài)定時刷新,
    對于動態(tài)往復描繪來說,比如類似于動態(tài)的顏色變化,動態(tài)的進行透明變化之類的周期性刷新來說,一般需要幾個條件
    1.動畫的周期性
    2.動畫的當前狀態(tài)在起始狀態(tài)和目標狀態(tài)之間
    實現(xiàn)上需要這么幾個參數(shù)
    • 起始時間 animation startTime
    • 當前時間 currentime
    • 動畫周期 animation duration
    • 往返因數(shù) fraction

        往返因數(shù)fraction

        比如動態(tài)調(diào)整透明度、動態(tài)修改顏色在動畫的過程中可以設定起始與目標值,通過fraction在0-1范圍內(nèi)進行運算進行調(diào)整。
    以算法來描述則為
      起始值設為 init
      目標值為 dest
      實際值為 actual
        actual=init*(1-fraction)+dest*fraction;
      比較明顯的例子為,將顏色從初始顏色動態(tài)變化到目標顏色
     
      Color startColor = Color.red;    // where we start
        Color endColor = Color.BLACK;         // where we end
        Color currentColor = startColor;
       ....
       描繪currentColor的一個圓
       在Timer的actionPerform里調(diào)整currentColor
       
    // interpolate between start and end colors with current fraction
            int red = (int)(fraction * endColor.getRed() + 
                    (
    1 - fraction) * startColor.getRed());
            
    int green = (int)(fraction * endColor.getGreen() + 
                    (
    1 - fraction) * startColor.getGreen());
            
    int blue = (int)(fraction * endColor.getBlue() + 
                    (
    1 - fraction) * startColor.getBlue());
            
    // set our new color appropriately
            currentColor = new Color(red, green, blue);

    通過定時器的時間參數(shù)動態(tài)調(diào)整往返因數(shù)

        通過時間參數(shù)進行計算
        如下代碼所示,在Timer的actionPerform里實現(xiàn)
                long currentTime = System.nanoTime() / 1000000;
                
    long totalTime = currentTime - animationStartTime;
                //調(diào)整周期的起始時間
                if (totalTime > animationDuration) {
                    animationStartTime 
    = currentTime;
                }
                
    float fraction = (float)totalTime / animationDuration;
                fraction 
    = Math.min(1.0f, fraction);
         注意當前只是計算出了fraction,如何使因子在1-0和0-1之間往復變化呢
        以下代碼實現(xiàn)了該算法
       
        // This calculation will cause alpha to go from 1 to 0 and back to 1
                
    // as the fraction goes from 0 to 1
                alpha = Math.abs(1 - (2 * fraction));
          
        //repaint();//重新繪制


    posted on 2008-02-14 12:00 如果有一天de 閱讀(1320) 評論(1)  編輯  收藏 所屬分類: richclient

    FeedBack:
    # re: swing Timer 與 animation 之 技巧一讓往返因數(shù) fraction從1到0再從0到1
    2008-02-17 12:28 | 519virus
    非常不錯呀……   回復  更多評論
      
    主站蜘蛛池模板: 亚洲乳大丰满中文字幕| 亚洲国产成人精品无码久久久久久综合 | 日本妇人成熟免费中文字幕 | 免费无毒a网站在线观看| 中文在线观看国语高清免费| 美丽的姑娘免费观看在线播放| 免费精品人在线二线三线区别| 亚洲国产V高清在线观看| 国产AV日韩A∨亚洲AV电影| 三年片在线观看免费观看大全动漫| 和老外3p爽粗大免费视频| 国产成人免费高清激情明星 | 久久夜色精品国产嚕嚕亚洲av| 亚洲AV无码国产精品麻豆天美| a级特黄毛片免费观看| 国产乱弄免费视频| 亚洲黄色免费网站| 七次郎成人免费线路视频 | 女人被男人桶得好爽免费视频| 亚洲va中文字幕无码| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲AV日韩综合一区尤物| 无码专区AAAAAA免费视频| 久久精品国产亚洲AV香蕉| 2022免费国产精品福利在线| 午夜成人免费视频| 亚洲高清国产拍精品26U| 国产成人+综合亚洲+天堂| 亚洲精品线路一在线观看| 亚洲AV无码一区二区三区牲色| 亚洲一区二区免费视频| 亚洲日韩乱码中文字幕| 每天更新的免费av片在线观看| 亚洲色偷偷偷综合网| 韩国免费一级成人毛片| 鲁死你资源站亚洲av| 亚洲精品狼友在线播放| 一级成人生活片免费看| 久久久久久亚洲Av无码精品专口| 啦啦啦高清视频在线观看免费 | 亚洲国产成a人v在线观看|