BorderContainer作为前景对象

时间:2011-09-12 21:25:40

标签: flex air

我正在寻找一种让我的spritevisualelement具有圆角的方法,以便它以圆形显示。

SpriteVisualElement包含来自FMS的视频流以进行显示,但我不希望它是矩形的。

有人给我一个暗示吗?

<s:BorderContainer
          borderColor="0x000000"
          borderAlpha="50"
          cornerRadius="150"
          borderWeight="3"
          x="161"
          y="10"
          >
<s:SpriteVisualElement id="vid" width="480" height="320"/>
          </s:BorderContainer>
<s:SpriteVisualElement id="vid_self_preview" x="710" y="373" width="90" height="60"/>

但是Container保持在后台,并且“vid”(= id)中显示的整个远程视频位于前台。 如何将Container设置为Foreground?然后只需设置整个应用程序背景即可。

1 个答案:

答案 0 :(得分:0)

听起来像Alpha Mask的完美用例。

试试这个:

import spark.core.MaskType;

private function addMask():void {
  var vidMask:SpriteVisualElement = new SpriteVisualElement();

  // first mask the entire thing transparent
  vidMask.graphics.beginFill(0x000000, 0);
  vidMask.graphics.drawRect(0,0,480,320);
  vidMask.graphics.endFill();

  // then draw the rounded rectangle (or whatever) that you want to show
  vidMask.graphics.beginFill(0x000000, 1); //color doesn't matter
  vidMask.graphics.drawRoundRect(0,0,480, 320, 200, 200); // choose 
  vidMask.graphics.endFill();

  addElement(vidMask); //the mask has to be on the Display List
  vid.mask = vidMask; // attach the mask to the sve
  vid.maskType = MaskType.ALPHA; // choose alpha masking
}

在您的MXML中:

<s:SpriteVisualElement id="vid" width="480" height="320" addedToStage="addMask()">

<强>更新

实际上,现在我已经考虑了一些,我最初的答案是误导。你真的只需要一个剪贴蒙版(不是阿尔法一个),因为不透明度没有渐变。您可以按如下方式更新addMask功能:

private function addMask():void {
      var vidMask:SpriteVisualElement = new SpriteVisualElement();

      // draw the rounded rectangle (or whatever) that you want to show
      vidMask.graphics.beginFill(0x000000, 1); //color doesn't matter
      vidMask.graphics.drawRoundRect(0,0,480, 320, 200, 200); // the last two effect the roundness
      vidMask.graphics.endFill();

      addElement(vidMask); //the mask has to be on the Display List
      vid.mask = vidMask; // attach the mask to the sve
      vid.maskType = MaskType.CLIP; // choose clip masking
    }

除非你最终在你的面具中使用渐变不透明度,否则这种方法会更好,因为它应该简化玩家必须执行的合成。