Стиль Spark Компонент с изображением - PullRequest
0 голосов
/ 03 декабря 2011

Я пытаюсь использовать изображение (встроенное) для большого пальца на моем компоненте ползунка Spark. Это должно быть просто - я знаю, что делать в mx, - но я не смог найти синтаксис Spark.

Мне даже не нужны состояния (вверх, вниз, снова и т. Д.), Поскольку это происходит в мобильном приложении.

Кто-нибудь знает?

Спасибо.

1 Ответ

3 голосов
/ 04 декабря 2011

Для вашего Spark Slider необходим пользовательский класс скинов, а для этого скина требуется SliderThumbSkin для большого пальца.

Spark Slider :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">

    <s:VSlider skinClass="SliderSkin" />

</s:Application>

SliderSkin - Для класса обложки Spark Slider требуется обложка большого пальца:

<!--- The default skin class is VSliderThumbSkin. 
        @copy spark.components.supportClasses.TrackBase#thumb
        @see spark.skins.spark.VSliderThumbSkin -->
<s:Button id="thumb" left="0" right="0" width="11" height="11"
          tabEnabled="false"
          skinClass="SliderThumbSkin" />

Это единственное изменение в VSliderSkin.Если вам нужен весь код скина, он находится ниже в разделе «Дополнительная информация» этого ответа.

SliderThumbSkin - для большого пальца кнопки скина большого пальца требуется обложка для изображений:

<?xml version="1.0" encoding="utf-8"?>
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
                   xmlns:s="library://ns.adobe.com/flex/spark"
                   xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
                   minWidth="21"
                   minHeight="21"
                   alpha.disabled="0.5">

    <fx:Metadata>
        <![CDATA[ 
        /** 
         * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>

    <!-- states -->
    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>

    <s:Image source.up="https://www.google.com/intl/en_com/images/srpr/logo3w.png"
             source.over="https://www.google.com/intl/en_com/images/srpr/logo3w.png"
             source.down="https://www.google.com/intl/en_com/images/srpr/logo3w.png"
             source.disabled="https://www.google.com/intl/en_com/images/srpr/logo3w.png"
             width="20"
             height="20" />

</s:SparkButtonSkin>

Здесь я заменил большой палец на логотип Google:

Spark slider skinned with Google logo image

Дополнительная информация

Эти скины могут быть автоматическисгенерировано с помощью помощника по содержимому Flash Builder с помощью [CTRL / COMMAND + SPACE] внутри кавычек skinClass="", которые выглядят так:

Create skin context menu

Откроется диалоговое окно для создания новогоСкин MXML:

New skin

Скины по умолчанию находятся в SDK по темам.Для Spark это было бы что-то вроде:

C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.5\sdks\4.5.1\frameworks\projects\spark\src\spark\skins\spark

Вот весь SliderSkin класс

<?xml version="1.0" encoding="utf-8"?>

<!--

    ADOBE SYSTEMS INCORPORATED
    Copyright 2008 Adobe Systems Incorporated
    All Rights Reserved.

    NOTICE: Adobe permits you to use, modify, and distribute this file
    in accordance with the terms of the license agreement accompanying it.
-->

<!--- The default skin class for the Spark VSlider component. The thumb and track skins are defined by the
VSliderThumbSkin and VSliderTrackSkin classes, respectively.  

       @see spark.components.VSlider
       @see spark.skins.spark.VSliderThumbSkin
       @see spark.skins.spark.VSliderTrackSkin

      @langversion 3.0
      @playerversion Flash 10
      @playerversion AIR 1.5
      @productversion Flex 4
-->
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="11" alpha.disabled="0.5">

    <fx:Metadata>
    <![CDATA[ 
        /** 
         * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        [HostComponent("spark.components.VSlider")]
    ]]>
    </fx:Metadata> 

    <fx:Script fb:purpose="styling">
        /* Define the skin elements that should not be colorized. 
           For slider, the skin itself is colorized but the individual parts are not. */
        static private const exclusions:Array = ["track", "thumb"];

        /**
         * @private
         */   
        override public function get colorizeExclusions():Array {return exclusions;}

        /**
         * @private
         */
        override protected function initializationComplete():void
        {
            useChromeColor = true;
            super.initializationComplete();
        }
    </fx:Script>

    <fx:Script>
        /**
         *  @private
         */  
        override protected function measure() : void
        {
            // Temporarily move the thumb to the top of the Slider so measurement
            // doesn't factor in its y position. This allows resizing the
            // VSlider to less than 100px in height. 
            var thumbPos:Number = thumb.getLayoutBoundsY();
            thumb.setLayoutBoundsPosition(thumb.getLayoutBoundsX(), 0);
            super.measure();
            thumb.setLayoutBoundsPosition(thumb.getLayoutBoundsX(), thumbPos);
        }
    </fx:Script>

    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" />
    </s:states>

    <fx:Declarations>
        <!--- The tooltip used in the mx.controls.Slider control.
              To customize the DataTip's appearance, create a custom VSliderSkin class. -->
        <fx:Component id="dataTip">
            <s:DataRenderer minHeight="24" minWidth="40" x="20"> 
                <s:Rect top="0" left="0" right="0" bottom="0">
                    <s:fill>
                        <s:SolidColor color="0x000000" alpha=".9"/>
                    </s:fill>
                    <s:filters>
                        <s:DropShadowFilter angle="90" color="0x999999" distance="3"/>
                    </s:filters>
                </s:Rect>
                <s:Label id="labelDisplay" text="{data}"
                         horizontalCenter="0" verticalCenter="1"
                         left="5" right="5" top="5" bottom="5"
                         textAlign="center" verticalAlign="middle"
                         fontWeight="normal" color="white" fontSize="11">
                </s:Label>
            </s:DataRenderer>
        </fx:Component>
    </fx:Declarations>

    <!--- The default skin class is VSliderTrackSkin.
           @copy spark.components.supportClasses.TrackBase#track 
           @see spark.skins.spark.VSliderTrackSkin -->
    <s:Button id="track" left="0" right="0" top="0" bottom="0" minHeight="33" height="100"
              tabEnabled="false"
              skinClass="spark.skins.spark.VSliderTrackSkin" />

    <!--- The default skin class is VSliderThumbSkin. 
           @copy spark.components.supportClasses.TrackBase#thumb
           @see spark.skins.spark.VSliderThumbSkin -->
    <s:Button id="thumb" left="0" right="0" width="11" height="11"
              tabEnabled="false"
              skinClass="SliderThumbSkin" />

</s:SparkSkin>
...