Hi, everyone!
I set an animator to move a view horizontally. At the same time, a timer
counts elapsed time.
The problem is, when the duration is larger than 45 sec, the animator stops
1sec before the timer get the right elapsed time.
That is, if the duration is 75 sec (my app need this value), the animator
stops when the timer is 74 sec.
I list test codes below.
Why animator and LzTimer are not consistent? How to make them consistent?
Any idea is appreciated!
##### codes below ############
<canvas debug="true">
<attribute name="dur" type="number"
value="$once{parseInt(canvas.setDur.getText())}" />
<text x="40" y="10" text="${'duratuon: '+canvas.dur+' sec'}"
resize="true" fontstyle="bold" fontsize="12" />
<text name="sec" x="200" y="10" resize="true" fontstyle="bold"
fontsize="12" text="${'elapsed time:'+this.cnt+' sec'}">
<attribute name="cnt" type="number" value="0" />
</text>
<text x="40" y="80" text="packet animation:" fontstyle="bold" />
<view x="40" y="100" width="400" height="15" bgcolor="gray"/>
<view name="pkt" x="40" y="100" width="40" height="15" bgcolor="blue">
<animator attribute="x" name="move" start="false" relative="false"
motion="linear">
<method event="onstop">
LzTimer.removeTimer(del);
Debug.write("animator stops at:",canvas.sec.cnt);
</method>
</animator>
<method name="Move" args="aXto,aDuration">
this.move.from=this.x;
this.move.setTo(aXto);
this.move.duration=aDuration;
this.move.doStart();
</method>
<method event="onx">
if(this.x==400){
Debug.write("packet arrives at:",canvas.sec.cnt);
}
</method>
</view>
<button name="setBtn" x="40" y="150" width="120">set duration(sec):
<method event="onclick">
canvas.setAttribute("dur",parseInt(canvas.setDur.getText()));
</method>
</button>
<edittext name="setDur" width="50" x="160" y="150">50</edittext>
<button name="btn" x="300" y="150">start animation
<method event="onclick">
canvas.setBtn.setClickable(false);
canvas.setBtn.setOpacity(0.5);
canvas.pkt.Move(400,canvas.dur*1000);
canvas.count();
</method>
</button>
<method name="count">
canvas.sec.setAttribute("cnt",canvas.sec.cnt+1);
del = new LzDelegate(this, "count");
LzTimer.resetTimer(del, 1000);
</method>
</canvas>
--
Vivian Zong