<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无码专区蜜桃| 波多野结衣免费在线观看| 国产亚洲高清不卡在线观看| GOGOGO高清免费看韩国| 国产偷窥女洗浴在线观看亚洲| 日韩在线视频播放免费视频完整版| 在线观看亚洲免费| 免费精品国自产拍在线播放| 亚洲黄片手机免费观看| 美女黄频视频大全免费的| 久操视频在线免费观看| 久久久久久亚洲精品| 亚洲毛片免费观看| 亚洲乱人伦精品图片| 一级有奶水毛片免费看| 亚洲成av人片在线观看无码不卡| 久久久久久久99精品免费| 免费一级毛片清高播放| 国产精品成人啪精品视频免费| 国产亚洲综合网曝门系列| 3d成人免费动漫在线观看| 77777亚洲午夜久久多喷| 日韩免费高清视频网站| 国产免费高清69式视频在线观看 | 特级毛片免费观看视频| 亚洲午夜爱爱香蕉片| 男人进去女人爽免费视频国产| 亚洲一二成人精品区| 成人毛片免费在线观看| 免费人成在线观看播放a| 亚洲啪啪AV无码片| 国产成人免费在线| 羞羞视频免费网站入口| 色婷婷六月亚洲婷婷丁香| 免费理论片51人人看电影| 色www永久免费| 亚洲天然素人无码专区| 亚洲精品国产字幕久久不卡| 无码国产精品一区二区免费I6| 曰批免费视频播放在线看片二|