Actionscript 3 Spark皮肤中的ScaleGrid属性做什么?

Actionscript 3 Spark皮肤中的ScaleGrid属性做什么?,actionscript-3,apache-flex,flash-builder,flex4.5,flex-spark,Actionscript 3,Apache Flex,Flash Builder,Flex4.5,Flex Spark,我一直在寻找scaleGridLeft和scaleGridRight等属性的实际含义,但在任何地方都找不到一致的解释。一个描述说,如果你有一个图像,你要做的是在该图像中定义一个不受缩放影响的矩形。下面的代码用于垂直滚动条拇指的自定义蒙皮。我将“right”设置为-1,因为拇指坐在赛道上时,其右侧会留下太大的间隙 如果scrollThumb.png为10x331,轨迹为16x521,如何使拇指正确位于轨迹的中心,并根据需要缩放 这些值指的是scale9切片。Left是从左侧开始的像素数,t

我一直在寻找scaleGridLeft和scaleGridRight等属性的实际含义,但在任何地方都找不到一致的解释。一个描述说,如果你有一个图像,你要做的是在该图像中定义一个不受缩放影响的矩形。下面的代码用于垂直滚动条拇指的自定义蒙皮。我将“right”设置为-1,因为拇指坐在赛道上时,其右侧会留下太大的间隙

如果scrollThumb.png为10x331,轨迹为16x521,如何使拇指正确位于轨迹的中心,并根据需要缩放



这些值指的是scale9切片。Left是从左侧开始的像素数,top是从顶部开始的像素数,right是从右侧开始的像素数,bottom是从底部向上移动的像素数

如果您试图缩放圆形框之类的对象,并希望保持角半径,则使用此选项。以下是一些详细介绍scale9的链接:

对于你的滚动条拇指,你可以看看这个网站,了解一些如何使用它的想法


由@wovencharlie提供的链接很有帮助,但答案不正确

左侧、右侧、顶部和底部的值都是根据要缩放的对象的注册点计算的。这意味着左上角是(0,0)。你用这些值定义的是一个矩形,你不在乎它是否在其中缩放。换句话说,缩放的是该矩形外部的

如果我设置scaleGridLeft='2',这意味着从0到2的所有内容都不会缩放。如果我设置scaleGridTop='5',这意味着视觉上高于y值5(相对于初始0,0注册点,因此y值小于5的任何对象)的所有对象都不会缩放。如果我设置scaleGridRight='12',这并不意味着从右侧开始移动的像素数。它设置了从初始注册点开始的像素数(12),创建了虚拟的垂直线,资产将不会缩放到该垂直线的右侧。因为我的拇指资源只有10个像素宽,所以12不是一个好值,并且会导致奇怪的结果(它似乎想要重新绘制拇指的垂直镜像,延伸到轨迹之外)。9将是一种法律价值

这就是为什么如果您输入的scaleGridLeft数字大于scaleGridRight数字,Flash Builder会告诉您这些是非法值。它们是不可能的——你不能有一个左值大于右值,因为它们都是相对于初始值(0,0)计算的

scaleGridBottom也是如此。它不是从底部向上计算的;它是从0,0开始计算的。同样,底部值不能小于顶部值,因此如果您尝试,Flash Builder会抱怨

如果您将scaleGridTop设置为(比如)20,将scaleGridBottom设置为30,您不是说“不要缩放前20和下30”。您是说“不要缩放前20,也不要缩放低于30的所有内容”——即使您的资产有200或300像素高。换句话说,你只允许缩放10个像素


我相信您可能会遇到错误,因为这小于组件的允许大小(尽管不确定该零件)。

谢谢。我熟悉flashcs中的网格(尽管我现在正在使用flashbuilder)。我了解角落的情况——谢谢你的链接。但如果你看我的拇指,它不是关于角的,而是关于顶部和底部的“箭头”部分。在第二个链接中,他为什么设置这些:scaleGridLeft='2',scaleGridTop='5',scaleGridRight='12',scaleGridBottom='275'?对于一个对称的拇指来说,到底为什么顶部是5,底部是275?他的拇指也不是关于角落的,是吗?你的“assets/scrollThumb.png”有多大?看起来它的宽度小于11像素,这至少会造成部分问题。尝试以下设置:scaleGridLeft='0',scaleGridTop='10',scaleGridRight='8',scaleGridBottom='265'
<?xml version="1.0" encoding="utf-8"?>


<!--- The default skin class for the Spark Button component.

   @see spark.components.Button

  @langversion 3.0
  @playerversion Flash 10
  @playerversion AIR 1.5
  @productversion Flex 4
-->
<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:BitmapImage source="@Embed('assets/scrollThumb.png', scaleGridLeft='2', scaleGridTop='20', scaleGridRight='11', scaleGridBottom='50')" 
               left="0"  top="0" bottom="0" right="-1" />
</s:SparkButtonSkin>