先描述一下作品的需求:
滾動新聞作爲當前ViewStack的其中一頁,要實現定時刷新。
單純的滾動新聞效果,相信大家都很容易實現,不過就是通過設置Move的一些屬性罷了,
//滾動字幕
private function moveAction():void{
if(recordsNum>DEFAULT_SCROLL_ROWNUM){
move_up.end(); //這句話 最好加 否則會在HttpService刷新數據時 產生其他效果
move_up.yFrom = 0;
move_up.yTo = 0-AbfltDG.height;
move_up.repeatCount = 0; //loop
move_up.repeatDelay = 0; //loop time
move_up.duration = SPEED_SCROLL*recordsNum; //the time of scroll once 其中SPEED_SCROLL、
recordsNum都是自定義的變量Number類型
move_up.play();
}
}
<!--相應頁面元素-->
<mx:Move id="move_up" target="{AbfltDG}"/>
<mx:Canvas x="310" y="265" width="670" height="450" id="canvas_dg" horizontalScrollPolicy="off" verticalScrollPolicy="off" mouseOver="move_pause()" mouseOut="move_resume()" backgroundColor="#90C3FC">
<mx:DataGrid x="0" y="0" width="670" height="500" id="AbfltDG" dataProvider="{fltdata}" verticalScrollPolicy="off" showHeaders="false" verticalGridLines="true" styleName="ABFlt" visible="false" backgroundColor="#90C3FC" backgroundAlpha="0.9">
<mx:columns>
<mx:DataGridColumn headerText="航站" dataField="stationName" textAlign="center" fontFamily="宋體" fontSize="12" itemRenderer="sim.monitor.asobj.CustomBackgroundComp"/>
<mx:DataGridColumn headerText="航班號" dataField="fltNumber" textAlign="center" fontFamily="宋體" fontSize="12" itemRenderer="sim.monitor.asobj.CustomBackgroundComp"/>
<mx:DataGridColumn headerText="延誤時間" dataField="delayTime" textAlign="center" fontFamily="宋體" fontSize="12" itemRenderer="sim.monitor.asobj.CustomBackgroundComp"/>
<mx:DataGridColumn headerText="延誤原因" dataField="delayReason" textAlign="center" fontFamily="宋體" fontSize="12" itemRenderer="sim.monitor.asobj.CustomBackgroundComp"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
然而,爲了實現在ViewStack中的定時刷新,就要考慮一下界面效果的問題了:
第一、如果不考慮刷新時間,將會造成數據在滾動的過程中刷新;
第二、如果把滾動新聞效果頁作爲一個獨立的控件,如何在ViewStack中訪問它,並控制好每次在滾動結束時,根據刷新策略來進行組件的刷新;
這兩個問題有些棘手,好在經過思考和查閱,想到了對策!