样式和外观导航 Navigation

关于造型和外观导航

首先贴上一张我修改后的导航条截图:

导航滑块用于显示层在预定义的尺度。它包括一个滑块,放大和缩小按钮。本主题说明如何您可以更改的默认外观的导航控制,以满足您的项目。

屏幕截图显示导航控制。

下表列出了各种方法来改变滑块导航:

不同方式的改变滑块导航

改变使用层叠样式表(CSS)的导航滑块的位置

水平导航滑块,使用的是备用的皮肤:

不同的放大和缩小按钮使用自定义

屏幕截图显示改变的导航滑块的位置。

屏幕截图显示的水平导航滑块使用的是备用的皮肤。

屏幕截图显示不同的放大和缩小按钮使用自定义皮肤。

使用样式的导航滑块改变位置

CSS样式属性的距离为30像素的顶部和右边距在地图上的滑块。由于左边的属性是默认属性,你必须使用的不是数字(NaN)值,左边的属性值不使用。

需要注意的命名空间指令和限定引用ESRI |网站导航比例尺。组件改变其属性需要被唯一标识,以避免类名冲突。

  1. <fx:Style>  
  2.     @namespace esri "http://www.esri.com/2008/ags";  
  3.     esri|Navigation  
  4.     {  
  5.         top: 30;  
  6.         right: 30;  
  7.         left: NaN;  
  8.     }  
  9. </fx:Style>
改变方向的导航滑块使用替代皮肤

导航滑块的默认方向是垂直的。根据您的应用程序的要求,你可以改变方向的导航滑块水平。一个备用的皮肤中提供的应用程序编程接口(API),它可以用于此目的。这个备用的皮肤类,如下面的代码所示:

  1. <fx:Style>  
  2. @namespace esri "http://www.esri.com/2008/ags";  
  3. esri|Navigation  
  4. {  
  5. skin-class: ClassReference("com.esri.ags.skins.NavigationHorizontalSkin");  
  6. }  
  7. </fx:Style>
更改放大和缩小按钮,使用蒙皮

创建一个自定义皮肤,可以进一步提高导航滑盖的外观。在下面的屏幕截图中,用于替代图像的放大和缩小按钮,自定义工具提示显示瓦级(而不是地图的比例尺)。

您可以修改默认的导航控件皮肤类来创建一个备用的外观。在下面的章节中做的步骤来创建这个新的外观:

复制到你的项目中使用的默认外观的导航控制

默认情况下,导航控制使用NavigationSkin.mxml的,NavigationZoominButtonSkin.mxml,并NavigationZoomoutButtonSkin.mxml的皮肤类。复制这三个文件从<Extracted_API_Download_Location> /皮肤/ / src文件夹到你的Flex项目的src文件夹,然后重命名这些文件。请参阅以下内容:

  1. 将重命名NavigationSkin.mxml MyNavigationSkin.mxml
  2. 将重命名NavigationZoominButtonSkin.mxml MyNavigationZoominButtonSkin.mxml
  3. 将重命名NavigationZoomoutButtonSkin.mxml MyNavigationZoomoutButtonSkin.mxml

屏幕截图显示的皮肤文件。

修改的MyNavigationSkin.mxml的的皮肤类

这是默认的皮肤类包含的滑块,和按钮,用于放大和缩小的地图。修改皮肤提供了新的工具提示格式和改变皮肤的放大和缩小按钮。

  1. 下面的修改工具提示价值:

    请参阅功能formatSliderDataTip。此功能是用来计算的值的工具提示是可见的,当拇指按压滑块。缺省情况下,工具提示被设置到的地图的比例尺。作如下修改以显示瓷砖水平:

  1. private function formatSliderDataTip(value:Number):String  
  2. {  
  3.     const lod:LOD = hostComponent.map.lods[value];  
  4.     return lod ? (lod.level + 1).toString() : "Error";  
  1. 执行下列步骤来修改提示的外观:
     
  2. CSS属性是用来改变工具提示外观。修改后的工具提示,有一个蓝色的背景搭配是大胆的字体类型。CSS类选择器看起来像下面这样:

<fx:Style>  

  1.     .tooltipStyle  
  2.     {  
  3.         backgroundAlpha: 1.0;  
  4.         backgroundColor: haloBlue;  
  5.         fontWeight: bold;  
  6.         color: white;  
  7.     }  
  8. </fx:Style>
  1. 定义的样式类的滑块的dataTipStyleName属性设置为下面的代码所示
    <mx:VSlider id="slider"  
                dataTipFormatFunction="formatSliderDataTip"  

            ...  

  1. dataTipStyleName="tooltipStyle"/>

  1. 下面为放大和缩小按钮来改变皮肤类:
  2. 设置新的皮肤类引用的放大和缩小按钮。新的皮肤的类更改图标的按钮。在后续步骤中,您将创建这些被引用的皮肤类。

<s:Button id="zoomInButton"  

  1.             ...  

  2. skinClass="MyNavigationZoomInButtonSkin"

  3.             ... />

  4. ...  

  5. <s:Button id="zoomOutButton"

  6.             ...  

  7. skinClass="MyNavigationZoomOutButtonSkin"

  8.             ... />

 

修改后的MyNavigationSkin.mxml文件看起来像下面这样:  

  1. <?xml version="1.0" encoding="utf-8"?>  
  1. <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"

  2. xmlns:s="library://ns.adobe.com/flex/spark"

  3. xmlns:mx="library://ns.adobe.com/flex/mx">

  4. <fx:Metadata>

  5.     [HostComponent("com.esri.ags.components.Navigation")]  

  6. </fx:Metadata>

  7. <fx:Declarations>

  8. <mx:NumberFormatter id="numberFormatter" rounding="nearest"/>

  9. </fx:Declarations>

  10. <fx:Script>

  11. <![CDATA[

  12.             import com.esri.ags.layers.supportClasses.LOD;

  13.             private function formatSliderDataTip(value:Number):String

  14.             {

  15.                 const lod:LOD = hostComponent.map.lods[value];

  16.             return lod ? (lod.level + 1).toString() : "Error";

  17.             }

  18.         ]]>

  19. </fx:Script>

  20. <fx:Style>

  21.         .tooltipStyle  

  22.         {  

  23.             backgroundAlpha: 1.0;  

  24.             backgroundColor: haloBlue;  

  25.             fontWeight: bold;  

  26.             color: white;  

  27.         }  

  28. </fx:Style>

  29. <s:states>

  30. <s:State name="normal"/>

  31. <s:State name="disabled"/>

  32. <s:State name="normalWithSlider"/>

  33. <s:State name="disabledWithSlider"/>

  34. </s:states>

  35. <s:Rect bottom="0"

  36. left="0"

  37. radiusX="10"

  38. radiusY="10"

  39. right="0"

  40. top="0">

  41. <s:fill>

  42. <s:SolidColor alpha="0.5" color="0x000000"/>

  43. </s:fill>

  44. </s:Rect>

  45. <s:VGroup gap="2"

  46. horizontalAlign="center"

  47. minHeight="34"

  48. paddingBottom="5"

  49. paddingLeft="3"

  50. paddingRight="3"

  51. paddingTop="4">

  52. <s:Button id="zoomInButton"

  53. enabled.disabled="false"

  54. enabled.disabledWithSlider="false"

  55. skinClass="MyNavigationZoomInButtonSkin"

  56. toolTip="{resourceManager.getString('ESRIMessages', 'zoomInTooltip')}" />

  57. <mx:VSlider id="slider"

  58. dataTipFormatFunction="formatSliderDataTip"

  59. dataTipPlacement="left"

  60. enabled.disabled="false"

  61. enabled.disabledWithSlider="false"

  62. enabled.normalWithSlider="true"

  63. height="160"

  64. includeIn="normalWithSlider,disabledWithSlider"

  65. liveDragging="false"

  66. maximum="{hostComponent.map.lods.length - 1}"

  67. showDataTip="true"

  68. snapInterval="1"

  69. tickColor="#000000"

  70. tickInterval="1"

  71. tickLength="3"

  72. tickOffset="-3"

  73. tickThickness="1"

  74. value="{hostComponent.map.level}"

  75. dataTipStyleName="tooltipStyle"/>

  76. <s:Button id="zoomOutButton"

  77. enabled.disabled="false"

  78. enabled.disabledWithSlider="false"

  79. skinClass="MyNavigationZoomOutButtonSkin"

  80. toolTip="{resourceManager.getString('ESRIMessages', 'zoomOutTooltip')}"/>

  81. </s:VGroup>

  82. </s:Skin>

修改的MyNavigationZoomInButtonSkin.mxml的的皮肤类

更改使用的图标图像显示放大按钮的位图图像。下面的代码显示了一个图像文件名 ​​为home_icon.png作为位图图像显示按钮的源代码:

  1. <s:BitmapImage  

  2.     bottom="0"  

  3.     ...  

  4.     source="@Embed(source='/assets/home_icon.png')"  

  5.     source.disabled="@Embed(source='/assets/home_icon.png')"  

  6.     source.down="@Embed(source='/assets/home_icon.png')"  

  7.     source.over="@Embed(source='/assets/home_icon.png')"  

  8. />

修改后的MyNavigationZoomInButtonSkin.mxml文件看起来像下面这样:  

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

  2.   

  3. <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"  

  4.         xmlns:s="library://ns.adobe.com/flex/spark"  

  5.         xmlns:mx="library://ns.adobe.com/flex/mx"  

  6.         minHeight="10"  

  7.         minWidth="10">  

  8.   

  9.     <fx:Metadata>  

  10.         [HostComponent("spark.components.Button")]  

  11.     </fx:Metadata>  

  12.   

  13.     <s:states>  

  14.         <s:State name="disabled"/>  

  15.         <s:State name="down"/>  

  16.         <s:State name="over"/>  

  17.         <s:State name="up"/>  

  18.     </s:states>  

  19.   

  20.     <s:BitmapImage  

  21.         bottom="0"  

  22.         left="0"  

  23.         right="0"  

  24.         source="@Embed(source='/assets/home_icon.png')"  

  25.         source.disabled="@Embed(source='/assets/home_icon.png')"  

  26.         source.down="@Embed(source='/assets/home_icon.png')"  

  27.         source.over="@Embed(source='/assets/home_icon.png')"  

  28.         top="0"  

  29.     />  

  30. </s:Skin>

修改的MyNavigationZoomOutButtonSkin.mxml的的皮肤类

更改的位图图像作为图标图像显示放大按钮。该图像文件,globe_icon.png,被用作用于显示的按钮的位图图像的源。

  1. <s:BitmapImage  

  2.     bottom="0"  

  3.     ...  

  4.     source="@Embed(source='/assets/globe_icon.png')"  

  5.     source.disabled="@Embed(source='/assets/globe_icon.png')"  

  6.     source.down="@Embed(source='/assets/globe_icon.png')"  

  7.     source.over="@Embed(source='/assets/globe_icon.png')"  

  8. />

修改后的MyNavigationZoomOutButtonSkin.mxml文件看起来像下面这样:  

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

  2. <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"  

  3.         xmlns:s="library://ns.adobe.com/flex/spark"  

  4.         xmlns:mx="library://ns.adobe.com/flex/mx"  

  5.         minHeight="10"  

  6.         minWidth="10">  

  7.   

  8.     <fx:Metadata>  

  9.         [HostComponent("spark.components.Button")]  

  10.     </fx:Metadata>  

  11.   

  12.     <s:states>  

  13.         <s:State name="disabled"/>  

  14.         <s:State name="down"/>  

  15.         <s:State name="over"/>  

  16.         <s:State name="up"/>  

  17.     </s:states>  

  18.   

  19.     <s:BitmapImage  

  20.         bottom="0"  

  21.         left="0"  

  22.         right="0"  

  23.         source="@Embed(source='/assets/globe_icon.png')"  

  24.         source.disabled="@Embed(source='/assets/globe_icon.png')"  

  25.         source.down="@Embed(source='/assets/globe_icon.png')"  

  26.         source.over="@Embed(source='/assets/globe_icon.png')"  

  27.         top="0"  

  28.     />  

  29. </s:Skin>

在你的应用程序中引用的导航皮肤类

修改后的皮肤类,现在可以用来在应用程序中通过设置皮肤中的类属性的参考。下面的代码显示了修改后的皮肤类应用程序中引用:

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

  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  

  3. xmlns:s="library://ns.adobe.com/flex/spark"  xmlns:esri="http://www.esri.com/2008/ags">  

  4.   

  5. <fx:Style>  

  6.         @namespace esri "http://www.esri.com/2008/ags";  

  7.         esri|Navigation  

  8.         {  

  9.             skin-class: ClassReference("MyNavigationSkin");  

  10.         }  

  11.     </fx:Style>  

  12.   

  13.     <esri:Map >  

  14.         <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer" />  

  15.     </esri:Map>  

  16. </s:Application>

 

 

原文地址:https://www.cnblogs.com/x38160/p/3191307.html