<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)系 :: 聚合  :: 管理

    給網(wǎng)元添加倒影

    Posted on 2013-07-22 17:57 TWaver 閱讀(997) 評論(0)  編輯  收藏
    如果您拜讀過Swing第五刀:走馬觀花看世博,您是否好奇Flex/Flash是否真的像Swing刀系列作者提到的那樣,用Flex/Flash內(nèi)置的動畫、渲染、濾鏡等機制可以實現(xiàn)各種“酷炫到底”的效果。先上個“給網(wǎng)元添加倒影”的圖給您解下疑惑:

    單單倒影很容易,就是把圖片旋轉(zhuǎn)180度:
    1 var result:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
    2 var matrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);
    3 matrix.translate(-source.width / 2, -source.height / 2);
    4 matrix.rotate(Math.PI);
    5 matrix.translate(source.width / 2, source.height / 2);
    6 result.draw(bitmapData, matrix);

    麻煩的是倒影從上到下透明度會慢慢變小,這就需要給BitmapData的copyPixels方法提供第4個參數(shù)alphaBitmapData,下面是創(chuàng)建alphaBitmapData的代碼:
     1 private static function createAlphaGradientBitmap(width:Number, height:Number):BitmapData {
     2     var alphaGradientBitmap:BitmapData = new BitmapData(width, height, true, 0x00000000);
     3     var gradientMatrix:Matrix = new Matrix();
     4     var gradientSprite:Sprite = new Sprite();
     5     gradientMatrix.createGradientBox(width, height, Math.PI/2, 0, 0);
     6     gradientSprite.graphics.beginGradientFill(GradientType.LINEAR, [0xFFFFFF, 0xFFFFFF], [0, 1], [0, 255], gradientMatrix);
     7     gradientSprite.graphics.drawRect(0, 0, width, height);
     8     gradientSprite.graphics.endFill();
     9     alphaGradientBitmap.draw(gradientSprite);
    10     return alphaGradientBitmap;
    11 }

    然后就可以生成倒影圖片:
     1 private static function createShadowBitmapData(source:BitmapData):BitmapData {
     2     var bitmapData:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
     3     bitmapData.copyPixels(source, new Rectangle(0, 0, source.width, source.height), new Point(), createAlphaGradientBitmap(source.width, source.height));
     4                 
     5     var result:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
     6     var matrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);
     7     matrix.translate(-source.width / 2, -source.height / 2);
     8     matrix.rotate(Math.PI);
     9     matrix.translate(source.width / 2, source.height / 2);
    10     result.draw(bitmapData, matrix);
    11     return result;
    12 }

    最后注冊這個倒影圖片,作為網(wǎng)元的圖片
    1 Utils.registerImageByBitmapData("from", createShadowBitmapData(Utils.getImageAsset(from.image).bitmapData));
    2 follower.image = "from";

    完整測試代碼如下:
     1 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
     2                 xmlns:tw="http://www.servasoftware.com/2009/twaver/flex"
     3                 paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0" backgroundColor="#FFFFFF"
     4                 creationComplete="init()">
     5     <mx:Script>
     6         <![CDATA[
     7             import twaver.AlarmSeverity;
     8             import twaver.ElementBox;
     9             import twaver.Follower;
    10             import twaver.IElement;
    11             import twaver.Link;
    12             import twaver.Node;
    13             import twaver.Utils;
    14             
    15             private var box:ElementBox;
    16             
    17             private function init():void {
    18                 box = network.elementBox;
    19                 network.selectionModel.filterFunction = function (e:IElement):Boolean {
    20                     return !(e is Follower);
    21                 };
    22                 
    23                 var from:Node = new Node();
    24                 from.location = new Point(100, 300);
    25                 box.add(from);
    26                 
    27                 Utils.registerImageByBitmapData("from", createShadowBitmapData(Utils.getImageAsset(from.image).bitmapData));
    28                 var follower:Follower = new Follower();
    29                 follower.image = "from";
    30                 follower.host = from;
    31                 follower.location = new Point(from.x, from.y + from.height + 10);
    32                 box.add(follower);
    33                 
    34                 var to:Node = new Node();
    35                 to.alarmState.increaseNewAlarm(AlarmSeverity.CRITICAL);
    36                 to.location = new Point(300, 100);
    37                 box.add(to);
    38                 
    39                 Utils.registerImageByBitmapData("to", createShadowBitmapData(Utils.getImageAsset(to.image).getBitmapData(AlarmSeverity.CRITICAL.color)));
    40                 follower = new Follower();
    41                 follower.image = "to";
    42                 follower.host = to;
    43                 follower.location = new Point(to.x, to.y + to.height + 10);
    44                 box.add(follower);
    45                 
    46                 var link:Link = new Link(from, to);
    47                 box.add(link);
    48             }
    49             
    50             private static function createShadowBitmapData(source:BitmapData):BitmapData {
    51                 var bitmapData:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
    52                 bitmapData.copyPixels(source, new Rectangle(0, 0, source.width, source.height), new Point(),
    53                     createAlphaGradientBitmap(source.width, source.height));
    54                 
    55                 var result:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
    56                 var matrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);
    57                 matrix.translate(-source.width / 2, -source.height / 2);
    58                 matrix.rotate(Math.PI);
    59                 matrix.translate(source.width / 2, source.height / 2);
    60                 result.draw(bitmapData, matrix);
    61                 return result;
    62             }
    63             
    64             private static function createAlphaGradientBitmap(width:Number, height:Number):BitmapData {
    65                 var alphaGradientBitmap:BitmapData = new BitmapData(width, height, true, 0x00000000);
    66                 var gradientMatrix:Matrix = new Matrix();
    67                 var gradientSprite:Sprite = new Sprite();
    68                 gradientMatrix.createGradientBox(width, height, Math.PI/2, 0, 0);
    69                 gradientSprite.graphics.beginGradientFill(GradientType.LINEAR, [0xFFFFFF, 0xFFFFFF], 
    70                     [0, 1], [0, 255], gradientMatrix);
    71                 gradientSprite.graphics.drawRect(0, 0, width, height);
    72                 gradientSprite.graphics.endFill();
    73                 alphaGradientBitmap.draw(gradientSprite);
    74                 return alphaGradientBitmap;
    75             }
    76         ]]>
    77     </mx:Script>
    78     <tw:NetworkX id="network" width="100%" height="100%"/>
    79 </mx:Application>

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV女人18毛片水真多| 久久99热精品免费观看牛牛| 国产亚洲人成网站在线观看| 在线观看永久免费| jzzijzzij在线观看亚洲熟妇| 色久悠悠婷婷综合在线亚洲| 四虎最新永久免费视频| 十八禁的黄污污免费网站| 亚洲伦理一区二区| 免费v片在线观看品善网| 最刺激黄a大片免费网站| 无遮挡a级毛片免费看| 亚洲最新中文字幕| 在线A亚洲老鸭窝天堂| 大陆一级毛片免费视频观看i| 成人av片无码免费天天看| 亚洲日本国产综合高清| 亚洲国产精彩中文乱码AV| 国产最新凸凹视频免费| 四虎成年永久免费网站| 久久久久久噜噜精品免费直播| 亚洲一区精彩视频| 亚洲AV综合色一区二区三区| 国产伦精品一区二区三区免费下载| 99re免费99re在线视频手机版| 一级毛片正片免费视频手机看 | 看全色黄大色大片免费久久| 免费福利电影在线观看| 粉色视频成年免费人15次| 77777午夜亚洲| 亚洲第一页在线视频| 亚洲av永久无码精品网站| 亚洲第一区精品日韩在线播放| 女人18毛片免费观看| 成年人视频免费在线观看| 黄色免费在线网站| 国产又黄又爽胸又大免费视频| 美女啪啪网站又黄又免费| 国产午夜亚洲精品国产| 亚洲国产精品综合久久久| 久久久久亚洲av无码尤物|