今天修改HSlider高度的时候遇到的问题。客户认为HSlider太细,要求加粗。
查了HSlider的API, 没有设置相关high的属性或方法。去adobe查到一篇讲HSlider的不错(这里)
首先要分清,HSlider由
Track (滑杆)
Thumb (指针)
Tick (刻度)
Label (刻度读数)
组成,这里要修改的是Track的粗细。
找到了HSlider的原代码,Flex SDK 2\frameworks\source\mx\controls\HSlider.as和父类Flex SDK 2\frameworks\source\mx\controls\sliderClasses\Slider.as
Track声明为
- private var track:IFlexDisplayObject;
再查看Flex SDK 2\frameworks\defaults.css 注意到HSlider的trackSkin被设为mx.skins.halo.SliderTrackSkin
查看mx\skins\halo\SliderTrackSkin.as 其measuredHeight始终返回4。
在自己的项目中,新建一个MySliderTrackSkin类
- package components.skin
- {
- import flash.display.GradientType;
- import mx.styles.StyleManager;
- import mx.utils.ColorUtil;
- import mx.skins.halo.SliderTrackSkin;
-
- public class STSliderTrackSkin extends SliderTrackSkin
- {
-
- public function STSliderTrackSkin()
- {
- super();
- }
-
- override public function get measuredHeight():Number
- {
- return 7;
- }
- }
- }
然后在项目的.mxml文件中HSlider处修改如下
- <mx:HSlider id="scrubber" alpha="0.5"
- trackSkin="components.skin.STSliderTrackSkin"
-
- thumbRelease="onScrubberThumbRelease();"
- click="onScrubberClick(event);"
-
- thumbUpSkin="@Embed('images/c.gif')"
- thumbOverSkin="@Embed('images/c1.gif')"
- thumbDownSkin="@Embed('images/c1.gif')"
- />
设定trackSkin为自己建立的类即可。