フレックスフレームワークのSolidColorStrokeに関する問題を解決する必要がありました。シナリオは単純で、目に見えるオブジェクトがあり、その周りに境界線が必要です。Rectを描画するグラフィックコンポーネントを作成しました。そのRectは次のように定義されました
object; // the object which should get the border, defined somewhere outside,
// just fyi
var borderThickness:Number = 10;
rect.x = object.x - borderThickness;
rect.y = object.y - borderThickness;
rect.width = object.width + (borderThickness * 2);
rect.height = object.height + (borderThickness * 2);
rectStroke.weight = borderThickness;
//the MXML code
<s:Rect id="rect">
<s:stroke>
<s:SolidColorStroke id="rectStroke" />
</s:stroke>
</s:Rect>
私はそれがこのようになるべきだと思いました(説明のためだけに、それがどうあるべきかについての正確なイメージではなく、この図の境界線は正確にオブジェクトの周りにあります)
しかし、境界線が右側と下部のオブジェクトの一部を覆っていたので、私は間違っていました。私の次の考えは、境界線のストロークはコンポーネントの内側ではなく、境界線の両側で均等に伸びることでした。つまり、コンポーネントの内部で成長し、x = 0、y = 0の位置に配置すると、境界線の左側の例の幅は0から10になります。境界線が太くなる取得すると、大きな長方形が1つだけになるまで、内側に成長します。
境界線の各部分に均等に成長すると言うとき、つまり、長方形をx = 0、y = 0に配置し、境界線の厚さが10pxの場合、境界線の左側は-5から5になります。私が何を意味するのかは明らかです。
ですから、前に言ったように、境界線はストロークの両方の部分に等しく成長すると思いました。そこで、幅と高さの計算を次のように変更しました。
rect.width = object.width + borderThickness;
rect.height = object.height + borderThickness;
これで、オブジェクトの幅と高さは、borderThickness(すべての側のborderThicknessの半分)を増やすだけです。私は今、境界線がオブジェクトに正確にフィットするはずだと思いました(私の最初のバージョンでも期待したように...)。
最初のバージョンよりも見栄えが良くなりますが、オブジェクトの左右の一部がカバーされています。
なぜそれが期待どおりに機能しないのかを長い間考えた後、私は自分に合った解決策を見つけました。ストロークは両側で均等に伸びていないようで、内側に75%、外側に25%伸びているようです。次の図は、それが何を意味するかを示しています。
境界線の内側の黄色い線は、実際の境界線を示しています(ストロークが1pxの場合)。ストロークのちょうど真ん中にありますが、内側から75%、外側から25%であることがわかります。
私の質問は、誰かが同様の行動を経験するかということです。なぜそれがそのように機能するのか誰かが知っていますか?私はそれを正しく使用していますか?または私は何が間違っているのですか?
Adobeのドキュメントには、SolidColorStrokeがこのように機能することが実際には記載されていません。さらにコードが必要な場合は、お知らせください。
よろしく
マーカス