• Flex + XML的图片轮显


    点击查看示例运行效果>>

    image

    有待优化的问题:

    1、载入图片未做loading处理;

    2、图片未使用延时加载处理,默认加载了全部的图片;

    3、界面UI美化

    逻辑部分与JavaScript有些类似,在解析XML时,单独写了一个as类来处理,btn的外观使用了CSS进行控制,资源全部放在名为assets文件夹目录下,工程目录

    image

    主文件的代码(PictureSwitch.mxml):

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    width="800" height="600"
    creationComplete="inited()" viewSourceURL="srcview/index.html">

    <mx:Script>
    <![CDATA[
    import mx.controls.Alert;
    import mx.controls.Button;
    import mx.controls.Image;
    import mx.effects.Effect;
    import mx.effects.Iris;
    import mx.effects.WipeLeft;
    import mx.effects.WipeRight;
    import mx.managers.ToolTipManager;

    import vo.AdVO;

    private static const XML_URL:String = "assets/xml/ad.xml";
    private var xmlDataArr:Array;
    private var timer:Timer;
    private var currentIdx:Number;
    private var buttonArr:Array;
    private var imagesArr:Array;

    private function inited():void
    {
    var _loader:URLLoader = new URLLoader();
    var _req:URLRequest = new URLRequest(XML_URL);

    _req.method = URLRequestMethod.GET;

    _loader.dataFormat = URLLoaderDataFormat.TEXT;

    _loader.addEventListener(Event.COMPLETE, completeHandler);
    _loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    _loader.load(_req);
    }

    private function progressHandler(evt:ProgressEvent):void
    {
    var str:String = "Loading " + Math.floor((evt.bytesLoaded / evt.bytesTotal) * 100) + "%";

    setTxt(str);
    }

    private function completeHandler(evt:Event):void
    {
    xmlDataArr = [];
    buttonArr = [];
    imagesArr = [];

    var _loader:URLLoader = evt.target as URLLoader;

    _loader.removeEventListener(Event.COMPLETE, completeHandler);
    _loader.removeEventListener(ProgressEvent.PROGRESS, progressHandler);

    var _xml:XML = XML(_loader.data);
    var _adVO:AdVO;
    var _idx:Number = 0;

    for each (var x:XML in _xml.child("item"))
    {
    _idx++;

    _adVO = new AdVO(x);

    createPictureItem(_adVO, _idx);

    xmlDataArr.push(_adVO);
    }

    ToolTipManager.enabled = false;

    autoPlay();

    timer = new Timer(3000, 0);
    timer.addEventListener(TimerEvent.TIMER, autoPlay);
    timer.start();

    loadingTxt.visible = false;
    }

    private function createPictureItem(adVO:AdVO, idx:Number):void
    {
    var _button:Button = new Button();
    _button.width = 30;
    _button.height = 15;
    _button.buttonMode = true;
    _button.label = idx.toString();
    _button.addEventListener(MouseEvent.CLICK, changeHandler);

    btnContainer.addChild(_button);

    buttonArr.push(_button);


    var _image:Image = new Image();
    _image.x = 0;
    _image.y = 0;
    _image.source = adVO.getImgUrl();
    // _image.visible = false;
    _image.setStyle("showEffect", getRandomEffect());
    // _image.setStyle("hideEffect", "fadeOut");
    _image.buttonMode = true;

    _image.addEventListener(MouseEvent.CLICK, clickHandler);

    imgContainer.addChild(_image);

    imagesArr.push(_image);
    }

    private function autoPlay(evt:TimerEvent=null, idx:Number=NaN):void
    {
    var _btn:Button;
    var _img:Image;

    if (!isNaN(currentIdx))
    {
    _btn = Button(buttonArr[currentIdx]);
    _btn.styleName = "";

    // _img = Image(imagesArr[currentIdx]);
    // _img.visible = false;
    }

    if (isNaN(currentIdx))
    {
    currentIdx = 0;
    }
    else {

    if (!isNaN(idx))
    {
    currentIdx = idx;
    }
    else
    {
    currentIdx += 1;
    }

    if (currentIdx > buttonArr.length - 1)
    {
    currentIdx = 0;
    }
    }

    _btn = Button(buttonArr[currentIdx]);
    _btn.styleName = "selected";

    _img = Image(imagesArr[currentIdx]);
    _img.parent.setChildIndex(_img, imagesArr.length - 1);
    _img.visible = false;
    _img.visible = true;
    }

    private function getRandomEffect():String
    {
    var arr:Array = [
    'fadeIn',
    'iris',
    'wipeRight',
    'wipeLeft',
    'blur',
    'dissolve'
    ];

    var idx:Number = Math.floor(Math.random() * arr.length);

    return arr[idx].toString();
    }

    private function changeHandler(evt:MouseEvent=null):void
    {
    timer.stop();
    timer.reset();
    timer.start();

    var _btn:Button = Button(evt.target);
    var _idx:Number = _btn.parent.getChildIndex(_btn);

    if (_idx !== currentIdx)
    {
    autoPlay(null, _idx);
    }
    }

    private function clickHandler(evt:MouseEvent):void
    {
    var adVO:AdVO = xmlDataArr[currentIdx] as AdVO;

    Alert.show("点击了" + (currentIdx + 1).toString() + "--打开链接:" + adVO.url);
    }

    private function setTxt(txt:String):void
    {
    loadingTxt.htmlText = txt;
    }

    ]]>
    </mx:Script>

    <mx:Style>
    Application {
    theme-color : #FFFFFF;
    font-size : 12;
    background-alpha : 0.0;
    border-color : #FFFFFF;
    }

    Button
    {
    font-weight:normal;
    corner-radius : 0;
    font-size : 9;
    color : #FFFFFF;
    background-color : #FF0000;
    fill-alphas:0.3, 0,3;
    fill-colors:"#FF0000", "#FF0000";
    background-color:#FF0000;
    }

    .selected {
    font-weight:bold;
    fill-alphas:1.0, 1.0;
    }
    </mx:Style>

    <mx:Iris id="iris" />
    <mx:Fade id="fadeIn" duration="1000" alphaTo="1.0" />
    <mx:Fade id="fadeOut" duration="800" alphaTo="0.0" alphaFrom="1.0" />
    <mx:WipeRight id="wipeRight" />
    <mx:WipeLeft id="wipeLeft" />
    <mx:Blur id="blur" duration="1000" blurXFrom="10.0" blurXTo="0.0" blurYFrom="10.0" blurYTo="0.0" />
    <mx:Dissolve duration="1000" alphaFrom="0.0" alphaTo="1.0" id="dissolve" />

    <mx:Canvas width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off">

    <mx:Canvas id="mask" width="100%" height="100%" backgroundColor="#FFFFFF" alpha="0" />

    <mx:Canvas id="imgContainer" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" />

    <mx:HBox id="btnContainer" width="100%" verticalAlign="bottom" bottom="10" right="10" horizontalAlign="right" horizontalGap="2" />

    <mx:Text text="loading..." id="loadingTxt" horizontalCenter="0" verticalCenter="-10" />

    </mx:Canvas>


    </mx:Application>

    参考网站:

    1、【原创】使用Flex实现图片(广告)切换控件

    2、图片的showEffect

    提供示例的完全源码下载,点此立即下载>>

  • 相关阅读:
    [TC11326]ImpossibleGame
    [CC-FNCS]Chef and Churu
    [JZOJ4786]小a的强迫症
    [USACO08NOV]Time Management
    ARC070F HonestOrUnkind
    LOJ2799 「CCC 2016」生命之环
    Luogu P5824 十二重计数法(小球盒子计数)
    Luogu P4249 [WC2007]剪刀石头布
    Kattis heapsoffun Heaps of Fun
    Kattis xorsequences XOR Sequences
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2180829.html
Copyright © 2020-2023  润新知