Я пытаюсь создать пользовательский индикатор выполнения, в котором реализованы общие функции, такие как скручивание и настройка общего значения и т. Д.,
Кажется, что все работает, но по какой-то причине процентComplete всегда равно 0 вместо увеличения значения, даже когда я вызываю setProgress ()
Update1:
Кроме того, анимация не вызываетФункция onUpdate (старый код)
Update2:
Если я изменил функцию onUpdate следующим образом, вызывается onComplete, но onUpdateProgress вызывается только один раз
onUpdate:this.onUpdateProgress(getTimer()),
Старый код (вызов функции изнутри анонимной функции)
onUpdate:function():void{this.onUpdateProgress(getTimer());}
Это мой пользовательский индикатор Progressbar. Mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:ProgressBar xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
indeterminate="false" labelPlacement="center" fontWeight="bold" textDecoration="none" fontStyle="normal" textAlign="center"
chromeColor="0xFFFFFF" mode="manual"
>
<fx:Script>
<![CDATA[
import caurina.transitions.Tweener;
import flash.utils.getTimer;
public var cancel:Boolean = false;
public const MESSAGE_TYPE_DELETE:String = "Delete";
public const MESSAGE_TYPE_REMOVE:String = "Remove";
public const MESSAGE_TYPE_COLLECT:String = "Collect";
public const MESSAGE_TYPE_MAINTAIN:String = "Maintain";
public const MESSAGE_TYPE_BUILD:String = "Build";
public const MESSAGE_TYPE_CONSTRUCT:String = "Construct";
private var _orgMessage:String;
private var _newMessage:String;
private var _completeMessage:String;
private var _lastValue:uint;
private var _tweenCompleted:Boolean;
private function onUpdateProgress(value:Number):void{
var txt:String;
if (!cancel){
Update3: ниже я задаю процесс выполнения
this.setProgress(value,_lastValue);
if (value == _lastValue){
txt = _completeMessage;
_tweenCompleted = true;
}else{
txt = _newMessage;
}
label = txt + ":" + int(this.percentComplete).toString() + "%";
trace(value,_lastValue,this.percentComplete);
}
}
private function onComplete():void{
_tweenCompleted = true;
label = _completeMessage + ": 100%";
trace("completed");
}
public function startProgress(message:String,duration:int = 2):void{
_tweenCompleted = false;
_lastValue = getTimer() + duration * 1000;
_newMessage = ((message.charAt(message.length - 1) == "e")?message.substr(0,message.length - 1):message) + "ing";
_completeMessage = "Completed";
Tweener.addTween(this,
{
time:duration,
onUpdate:function():void{this.onUpdateProgress(getTimer());},
onComplete:this.onComplete(),
transition:"liner"
}
);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</mx:ProgressBar>
Main mxml
protected function startProgress(event:MouseEvent):void
{
this.removeAllElements();
pb = null;
pb = new FGProgressBar();
this.addElement(pb);
pb.startProgress("Remove",5);
}
У меня есть команды трассировки в onUpdateProgress ()
trace(value,_lastValue,this.percentComplete);
- текущее значение прогресса, которым я являюсьпрохождение getTimer ()
- _lastValue is общее значение индикатора выполнения, которое устанавливается при инициализации (getTimer () + длительность * 1000)
- процентComplete - это состояние выполнения, которое должно увеличиться после setProgress ()
выдает что-то вроде этого
.
.
.
.
.
5162 8130 0
5210 8130 0
5244 8130 0
5754 8130 0
6262 8130 0
6771 8130 0
7279 8130 0
7787 8130 0
8295 8130 0
Если вы заметили трассировку, значение увеличивается, но процентComplete равен 0
Может кто-нибудь сказать мне, что мне не хватает?