Youtubeのシークバー |
右図ではそれぞれ、
(1) 濃い赤い領域:再生済み
(2) その右の薄い赤い領域:バッファリング済み
(3) その右の灰色領域:未バッファリング
を表しています。
「再生済み領域(1)」と「未再生領域(2)+(3)」の2つの領域だけを表現するシークバーの場合、例えば
[flex]Flex2でFLVプレイヤーのシークバーを作ってみる - func09
のように実装できます。
「再生済み領域(1)」と「バッファリング済み領域(2)」と「未バッファリング領域(3)」の3つの領域を表現するシークバーの場合、次のようにすると実現できます。
下記実装によるバッファリング領域付きシークバー |
実装例は次の通り。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="640" height="510" backgroundColor="#cccccc" creationComplete="initApp()"> <mx:Script> <![CDATA[ //10px x 10px の半透明の白い正方形画像 [Embed(source="image/slider_track.png")] private var imgSliderTrack:Class; //10px x 10px の青い正方形画像 [Embed(source="image/slider_track_highlight.png")] private var imgSliderTrackHighlight:Class; private function initApp():void { hsSeek.setStyle("trackSkin", imgSliderTrack); hsSeek.setStyle("trackHighlightSkin", imgSliderTrackHighlight); hsSeek.addEventListener(ProgressEvent.PROGRESS, onProgress); } private function onProgress(e:ProgressEvent):void { pbBuffer.setProgress(e.bytesLoaded, e.bytesTotal); } ]]> </mx:Script> <mx:VideoDisplay id="vd" x="0" y="0" width="640" height="480" source="sample.flv" autoPlay="true"/> <mx:ProgressBar id="pbBuffer" y="490" x="85" height="20" width="350" label="" mode="manual" trackHeight="11" barColor="#000000"/> <mx:HSlider id="hsSeek" styleName="hsSeek" y="480" x="80" height="20" width="360" maximum="{vd.totalTime}" minimum="0" value="{vd.playheadTime}" change="{ if(vd.stateResponsive) vd.playheadTime = hsSeek.value }" liveDragging="true" showTrackHighlight="true" allowTrackClick="true"/> </mx:Application>
0 件のコメント:
コメントを投稿