SeekBar 和 VolumeBar 组件十分相似,尽管它们在功能上不同。它们都具有手柄,都使用相同的手柄跟踪机制,并且都支持在其中嵌套剪辑以跟踪进度和完成程度。
在许多地方,FLVPlayback 组件中的 ActionScript 代码都假定 SeekBar 或 VolumeBar 组件的注册点(也称为
原点
或
零点
)位于内容的左上角,因此,维持这一惯例十分重要。否则,手柄以及进度和完成程度影片剪辑可能会有问题。
尽管外观 SWF 文件中的搜索栏使用 9 切片缩放(因为它们需要在运行时缩放),但 SeekBar FLV 自定义用户界面组件没有并且
不能
使用 9 切片缩放,因为它嵌套了影片剪辑。如果您想使 SeekBar 更宽或更高,则可能需要更改其内容,而不是缩放其大小。
手柄
手柄影片剪辑的一个实例位于第 2 帧。与 BackButton 和 ForwardButton 组件一样,该组件实际上永远不会转到第 2 帧;这些影片剪辑放置于此是为了使编辑更方便,并且以这种方式强制它们加载到 SWF 文件中,而不必在“元件属性”对话框中选中“在第一帧导出”复选框。不过,您仍然必须选择“为 ActionScript 导出”选项。
您可能会注意到,手柄影片剪辑在背景中有一个 Alpha 设置为 0 的矩形。此矩形增加了该手柄的点击区域的大小,这样,不必更改手柄外观就可以更容易地控制手柄,这与按钮的点击状态类似。因为该手柄是在运行时动态创建的,所以它必须是一个影片剪辑,而不是一个按钮。对于任何其他原因,Alpha 设置为 0 的这一矩形都不是必需的;通常,您可以用所需任何图像替代手柄内的内容。不过,如果将注册点保持在手柄影片剪辑的中部水平居中,则它的使用效果最好。
以下 ActionScript 代码位于 SeekBar 组件的第 1 帧上,用于管理手柄:
stop();
handleLinkageID = "SeekBarHandle";
handleLeftMargin = 2;
handleRightMargin = 2;
handleY = 11;
由于第 2 帧的内容,对
stop()
函数的调用是必需的。
第二行指定哪个元件要用作手柄;并且,如果您只编辑第 2 帧上的手柄影片剪辑实例,则应该无需对此进行更改。在运行时,FLVPlayback 组件将舞台上指定的影片剪辑的实例作为 Bar 组件实例的同级创建,也就是说它们具有相同的父影片剪辑。因此,如果您的栏位于根级别,则手柄也必须位于根级别。
变量
handleLeftMargin
确定手柄的原始位置 (0%),而变量
handleRightMargin
确定在结束时它所处的位置 (100%)。这两个数值提供与栏控件左端和右端的偏移量,正数值标记栏内部的限制,负数值标记栏外部的限制。这两个偏移量根据其注册点指定手柄可以转到的位置。如果您将注册点放置于手柄的中间,则该手柄的最左侧和最右侧将越过边界。为了正常使用,搜索栏影片剪辑必须将其注册点放置于其内容的左上角。
变量
handleY
确定该手柄相对于栏实例的
y
位置。这基于每个影片剪辑的注册点。范例手柄的注册点位于三角形的尖端,以便相对于可见部分放置它,而不考虑不可见的点击状态矩形。此外,为了正常使用,栏影片剪辑必须将其注册点保持在其内容的左上角。
因此,以这些限制为例,如果在 (100, 100) 位置设置了某个栏控件,并且其宽度为 100 个像素,则手柄在水平方向上的范围可从 102 到 198,并且在垂直方向上保持 111。如果您将
handleLeftMargin
和
handleRightMargin
更改为 -2,并将
handleY
更改为 -11,则手柄在水平方向上的范围可从 98 到 202,并且在垂直方向上保持 89。
进度和完成程度影片剪辑
SeekBar 组件具有
进度
影片剪辑,VolumeBar 具有
完成程度
影片剪辑。但在实践中,任何 SeekBar 或 VolumeBar 都可以不具有或者同时具有这两个影片剪辑,或者具有其中一个影片剪辑。它们在结构上相同,并在行为上类似,但跟踪不同的值。进度影片剪辑随着 FLV 文件下载而填充(这仅适用于 HTTP 下载,因为如果从 FMS 进行流式加载,它始终是满的),而完成程度影片剪辑随着手柄从左向右移动而填充。
FLVPlayback 组件通过查找特定的实例名称找到这些影片剪辑实例,因此,您的进度影片剪辑实例必须使栏影片剪辑作为其父级,并且具有实例名称 progress_mc。完成程度影片剪辑实例必须具有实例名称 fullness_mc。
您在设置进度和完成程度影片剪辑时,在其内部嵌套 fill_mc 影片剪辑实例与否均可。VolumeBar fullness_mc 影片剪辑
使用
fill_mc 影片剪辑显示该方法,SeekBar progress_mc 影片剪辑则
不使用
fill_mc 影片剪辑而显示该方法。
如果您想要进行的填充不通过扭曲外观无法缩放,则在内部嵌套了 fill_mc 影片剪辑的方法十分有用。
在 VolumeBar fullness_mc 影片剪辑中,嵌套的 fill_mc 影片剪辑实例被遮罩。您可以在创建影片剪辑时遮罩它,也可以在运行时动态地创建遮罩。如果您用影片剪辑遮罩它,则将该实例命名为
mask_mc
并对它进行设置,以便 fill_mc 显示为就像百分比为 100% 时一样。如果您不遮罩 fill_mc,则动态创建的遮罩将是矩形,并且在 100% 时与 fill_mc 的大小相同。
fill_mc 影片剪辑通过两种方法之一与遮罩一起显示,具体方法取决于 fill_mc.slideReveal 是
true
还是
false
。
如果 fill_mc.slideReveal 是
true
,则 fill_mc 从左向右移动,以通过遮罩显示它。为 0% 时,它自始至终向左,因此不会有任何部分通过遮罩显示。随着百分比的增加,它向右移动,直到达到 100%,此时它位于舞台上的创建位置之后。
如果 fill_mc.slideReveal 是
false
或未定义(默认行为),则遮罩将从左向右调整大小,以显示 fill_mc 的更多部分。在它达到 0% 时,遮罩就在水平方向上缩放到 05,并且随着百分比的增加,
scaleX
也将增加,直到达到 100%,这时它将显示所有 fill_mc。
scaleX
= 100 并不是必需的,因为在创建 mask_mc 时可能已对它进行了缩放。
没有 fill_mc 的方法比具有 fill_mc 的方法更简单,但它水平扭曲填充。如果不需要进行该扭曲,则必须使用 fill_mc。SeekBar progress_mc 阐释了这一方法。
进度或完成程度影片剪辑根据百分比进行水平缩放。为 0% 时,实例的
scaleX
被设置为 0,这使其不可见。随着该百分比增加,将对
scaleX
进行调整,直到达到 100%,此时该影片剪辑的大小将与创建它时在舞台上的大小相同。同样,
scaleX
= 100 并不是必需的,因为在创建该影片剪辑实例时可能已对它进行了缩放。