先描述一下作品的需求:
滾動新聞作為當前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中訪問它,並控制好每次在滾動結束時,根據重新整理策略來進行組件的重新整理;
這兩個問題有些棘手,好在經過思考和查閱,想到了對策!