0

scaleGridLeft や scaleGridRight などの属性が実際に意味するものを探していますが、一貫した説明がどこにも見つかりません。ある説明によると、画像がある場合、その画像内でスケーリングの影響を受けない長方形を定義しようとしています。以下のコードは、Vertical Scroll Bar Thumb のカスタム スキン用です。'right' を -1 に設定しました。そうしないと、親指がトラックに収まったときに右側に大きな隙間ができてしまうからです。

scrollThumb.png が 10x331 で、トラックが 16x521 の場合、親指がトラックの中央に正しく配置され、必要に応じてスケーリングされるようにするにはどうすればよいですか?

スクロール サム ここに画像の説明を入力

<?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>
4

2 に答える 2

1

@wovencharlie が提供するリンクは役に立ちますが、答えは正しくありません。

左、右、上、下の値はすべて、スケーリングしようとしているものの登録点に関連して計算されます。これは、左上隅が (0,0) であることを意味します。これらの値で定義しているのは、スケーリングしても構わない長方形です。別の言い方をすれば、スケーリングされないのは、その長方形の外側にあるものです。

scaleGridLeft='2' を設定すると、これは 0 から 2 までのすべてがスケーリングされないことを意味します。scaleGridTop='5' を設定すると、視覚的に 5 の y 値を超えるもの (最初の 0,0 登録点を基準とするため、5 未満の y 値を持つもの) はスケーリングされないことを意味します。scaleGridRight='12' を設定した場合、これは右から移動するピクセル数を意味するわけではありません。最初の登録ポイントからのピクセル数 (12) を設定し、その右側に架空の垂直線を作成しています。アセットはスケーリングされません。私の親指アセットは幅が 10 ピクセルしかないので、12 は適切な値ではなく、おかしな結果になります (トラックの外側に伸びる、親指の垂直ミラー イメージを再描画する必要があるようです)。9 は正当な値です。

このため、scaleGridRight の数値よりも大きい scaleGridLeft の数値を入力すると、Flash Builder はこれらが不正な値であると通知します。それらは不可能です。どちらも初期値 (0,0) を基準にして計算されるため、右の値よりも大きい数値を持つ左の値を持つことはできません。

同じことが scaleGridBottom にも当てはまります。下から上に計算されているわけではありません。0,0から計算しています。繰り返しになりますが、上限値よりも小さい下限値を設定することはできないため、設定しようとすると Flash Builder からエラーが発生します。

scaleGridTop を (たとえば) 20 に設定し、scaleGridBottom を 30 に設定すると、「上位 20 と下位 30 をスケーリングしないでください」とは言えません。アセットの高さが 200 または 300 ピクセルであっても、「上位 20をスケーリングしないで、30 未満のすべてをスケーリングしないでください」と言っているのです。つまり、スケーリングできるのは 10 ピクセルだけです。

これはコンポーネントの許容サイズよりも小さいため、エラーが発生する可能性があると思います(その部分についてはわかりませんが)。

于 2012-06-21T17:41:24.747 に答える
0

これらの値は、scale9 スライスを参照します。左は左からのピクセル数、上は上からのピクセル数、右は右から始まるピクセル数、下は下から上に移動するピクセル数です。

これは、丸いボックスのようなものをスケーリングしようとしていて、角の半径を維持したい場合に使用されます。以下に、scale9 の詳細な説明を含むリンクをいくつか示します。

http://asgamer.com/2009/using-9-slice-scaling-to-retain-shape-while-resizing

スクロールバーの操作方法については、このサイトを参照してください。

http://dgrigg.com/blog/2010/07/06/flex-spark-list-with-custom-scroll-bar-and-itemrenderer/

于 2012-06-16T01:36:05.810 に答える