Скининг горизонтальной полосы прокрутки с помощью Degrafa
-
20-09-2019 - |
Вопрос
У меня возникают некоторые проблемы при попытке скинуть полосу прокрутки в horizontalList с помощью Degrafa.Полоса прокрутки вообще не отображается.Я проверил, должна ли полоса прокрутки отображаться без скининга, и это происходит.Есть ли какие-то проблемы с этим?Вот некоторый код:
Здесь я определяю HorizontalList, в котором мне нужна выделенная полоса прокрутки
<mx:HorizontalList horizontalScrollBarStyleName="thumbnailScrollbar"/>
Здесь я определяю ClassReference для скинов (null для стрелок, чтобы они не отображались).
.thumbnailScrollbar
{
up-arrow-skin: ClassReference(null);
down-arrow-skin: ClassReference(null);
trackSkin: ClassReference("ScrollBarTrackSkin");
thumbSkin: ClassReference("ScrollBarThumbSkin");
}
Полоса прокрутки trackskin:
<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://www.degrafa.com/2007">
<fills>
<SolidFill id="upFill" color="#FFFFFF" alpha="0.8"/>
</fills>
<geometry>
<RoundedRectangle id="track" x="-8" cornerRadius="16" width="{this.skinWidth}" height="{this.skinHeight}" fill="{upFill}"/>
</geometry>
</GraphicBorderSkin>
Полоса прокрутки из кожи большого пальца:
<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://www.degrafa.com/2007">
<fills>
<SolidFill id="background" color="#333333" alpha=".8"/>
</fills>
<geometry>
<RoundedRectangle id="thumb" cornerRadius="16" width="{this.skinWidth}" height="{this.skinHeight}" fill="{background}"/>
</geometry>
</GraphicBorderSkin>
Я заполняю горизонтальный список большим количеством элементов, чем доступно для просмотра, и, как я уже говорил ранее, полоса прокрутки появляется, когда я удаляю скининг.
Решение
Где задаются ваши skinHeight и skinWidth?Как правило, примеры degrafa делают что-то подобное в оболочке, чтобы обновить высоту / ширину:
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
awidth = unscaledWidth;
aheight = unscaledHeight;
}
В дополнение к этому, мне нужно было сделать это:
override public function get measuredWidth():Number {return 16; }
override public function get measuredHeight():Number {return 10;}
в моих скинах полосы прокрутки, чтобы получить нужную мне высоту и ширину.(то же самое для обоих V & H, поскольку они выполняют внутреннее вращение).В скинах Flex scrollbar был какой-то хакерский код, и мои полосы тоже не отображались.
Но в настоящее время я не использую degrafa для своих скинов, так что может возникнуть другая проблема.У меня нет перед глазами никаких примеров.