【原创】Flex特效初探

Flex特效初探

一个扩展后的LinkButton

当鼠标移动到LinkButton上的时候,在LinkButton上会出现一个向上移动的Label,并且会有一个振动的效果,当鼠标移走的时候,label消失,如图所示。
如何实现这个效果呢,下面是源码
演示下载地址:http://downloadnode.com/download.php?file=ea1d97c5e33d62ee4c470fb91b66a764


 

<? xml version="1.0" encoding="utf-8" ?>
< mx:Application  xmlns:mx ="http://www.adobe.com/2006/mxml"  layout ="absolute" >
    
< mx:Style >
    Label{
    fontSize: 14;
    }
    
</ mx:Style >
    
< mx:Script >
    
<![CDATA[
    import mx.events.EffectEvent;
    import mx.controls.Label;
    import mx.effects.easing.*;
    import mx.effects.Zoom;
    import mx.controls.Alert;
    public var testTry:Boolean = false;
    public var testTx:Boolean = false;
    public var Mylabelabel;
    public function LabelMove():void{
        movePauseMove.play();
    }
    internal function zoomMouseBig(targetStrinkButton):void{
        if (testTry == false) {
            Mylabel = new Label();
            Mylabel.id = "Mylb";
            Mylabel.text = "权限管理";
            //Alert.show((targetStr.x/2).toString());
            Mylabel.x = targetStr.x + (targetStr.width/4);
            Mylabel.y = targetStr.y-targetStr.height/2+5;
            Mylabel.fontContext = 14;
            var fropShadowFilter = new DropShadowFilter(5,30,0xFFFFFF,.8);
            var myFilters:Array = new Array();
            myFilters.push(f);
            Mylabel.filters = myFilters;
            Mylabel.addEventListener(MouseEvent.MOUSE_OUT,txTry1);
            Mylabel.text = "权限管理";
            Mylabel.visible = true;
            movePauseMove.target = Mylabel;
            this.addChild(Mylabel);
            movePauseMove.play();
            //movePauseMove.addEventListener(EffectEvent.EFFECT_END,changeTry);
            testTry = true;
            //Alert.show(targetStr.scaleX.toString());
            //创建Zoom对象
            var newZoom:Zoom = new Zoom();
            newZoom.zoomHeightTo=1.1;
            newZoom.zoomWidthTo=1.1;
            //指定作用对象
            //Alert.show(targetStr);
            newZoom.target = targetStr;
            //设置播放时长
            newZoom.duration = 300;
            //开始播放动画
            newZoom.play();
            newZoom.addEventListener(EffectEvent.EFFECT_END, txTry1);
        }
    }
    internal function zoomMouseNormal(targetStr:Object):void{
        if (testTx == false) {
            //创建Zoom对象
            var newZoom:Zoom = new Zoom();
            newZoom.zoomHeightTo=1;
            newZoom.zoomWidthTo=1;
            //指定作用对象
            newZoom.target = targetStr;
            //设置播放时长
            newZoom.duration = 300;
            //开始播放动画
            newZoom.play();
            Mylabel.parent.removeChild(Mylabel);
            testTx = true;
            testTry = false;
        }
    }
    internal function txTry1(env:Event):void {
    testTx = false;
    }
    
]]>
    
</ mx:Script >
<!--  
<mx:Sequence id="movePauseMove" target="{LinkBtTry}">
<mx:Move xBy="150" duration="2000" easingFunction="Bounce.easeOut"/>
<mxause duration="2000"/>
<mx:Move xBy="-150" duration="2000" easingFunction="Bounce.easeIn"/>
</mx:Sequence> 
-->
< mx:Move  id ="movePauseMove"  yBy ="-20"  duration ="1000"  easingFunction ="Bounce.easeOut" />
< mx:Move  id ="movePauseMoveBack"  yBy ="-30"  duration ="2000"  easingFunction ="Bounce.easeOut" />
< mx:LinkButton  id ="LinkBtTry"  x ="169"  y ="169"  label =""  height ="42"  width ="172"  
icon
="@Embed(source='image/Button1.gif')"  mouseOver ="zoomMouseBig(this.LinkBtTry)"
mouseOut
="zoomMouseNormal(this.LinkBtTry)"
/>
</ mx:Application >


 

全部的代码如上所示,现在就具体来说一下个部分的内容
首先是用到了Flex库中的Move组件,这个组件是用来做移动特效的,例如:从左向右移动,从上向下移动。
在引用这个组件的时候,有两种方式:一个是在组件里的绑定,如下:
<mx:Move id="movePauseMove" yBy="-20" duration="1000" target="{LinkBtTry}"
easingFunction="
Bounce.easeOut"/>

就是说在这个组件里面,我们直接将target的属性绑定到一个控件中去了。
还有一种是在AS文件中定义的,如
Var MyMove:Move = new Move();
MyMove.target = 一个控件对象;
其实呢,是当鼠标移动到LinkButton的时候,我们自己创建了一个Label的对象,在这个里面有两个问题需要注意一下:
一个是当我们创建对象的时候,

Mylabel = new Label();

Mylabel.id =
"Mylb";


Mylabel.text =
"权限管理";

//Alert.show((targetStr.x/2).toString());


Mylabel.x = targetStr.x + (targetStr.width/4);


Mylabel.y = targetStr.y-targetStr.height/2+5;

 

我们用Eclipse里面的自动功能,是无法出现Mylabel.x这样的属性的。再有一个是,如果你重新New了一个Label,设定Label.text的字体比较麻烦,我们可以直接使用CSS来完成,例如:

<mx:Style>

Label{


fontSize: 14;


}

</mx:Style>

 

也可以这样

<mx:Style>

Label.id{


fontSize: 14;

}

</mx:Style>

最后一个问题,就是LinkButton里面的添加图片了,代码如下:icon="@Embed(source='image/Button1.gif')"

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值