如何平滑用作对照皮肤的图像?

时间:2009-07-31 17:59:50

标签: flex actionscript-3 actionscript flex3

我正在嵌入这样的图像:

[Embed(source="/tool_deleteUp.png")]
private static const c_deleteButton_styleUp:Class;

我正在使用它:

_removeButton = new Button();
_removeButton.setStyle('upSkin', c_deleteButton_styleUp);

旋转按钮时,图像无法平滑缩放。我知道用于缩放图像控件中加载的图像的技巧,但是我正在撞墙,试图弄清楚如何在这里进行操作。

帮助!

4 个答案:

答案 0 :(得分:1)

一个hacky方式是遍历按钮的子/孙,找到Bitmap类型的相应c_deleteButton_styleUp,并将其平滑设置为true ...这是一个很大的... flex的缺陷,有时它需要用于造型的类,尽管有些IDisplayObjectFactory完全可以达到这个目的,并且会让你的生活变得更轻松......但生活才是生命......

不知道只有干净的灵活方式...我能想到的唯一可能性是创建一个SWF,其中包含您的资产作为符号,打开平滑,并从该SWF嵌入此符号...

希望有所帮助...

格尔茨

back2dos

答案 1 :(得分:1)

更好,更通用的解决方案。它不仅处理上述情况,而且还处理

  • 没有子类
  • 适用于任何UIComponent,包括IRawChildContainers(如Container),它隐藏了rawChildren中的皮肤子项
  • 它只会平滑新添加的项目,而不是每次控件更新时都运行。

public static function smoothChildBitmaps(object:UIComponent):void{

    // Define a nested smooth method
    function smoothChildren(val:UIComponent):void{
        var childList:IChildList;
        if(val is IRawChildrenContainer){
            childList = (val as IRawChildrenContainer).rawChildren;
        }
        else{
            childList = object;
        }

        for(var i:int = 0; i < childList.numChildren; i++){
            var child:Bitmap = childList.getChildAt(i) as Bitmap;
            if(child != null){
                child.smoothing = true;
            }
        }
    };

    // Call the nested method on the object right away
    smoothChildren(object);

    // Set up an event handler to re-call the method when a child is added
    object.addEventListener(
        Event.ADDED,
        function(args:Event):void{
            smoothChildren(object);
        }
    );
}

答案 2 :(得分:0)

愚蠢,但它确实有效。

import flash.display.Bitmap;
import mx.controls.Button;

public class SmoothButton extends Button{
    protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
        for(var i:int = 0; i < this.numChildren; i++){
            var child:Bitmap = this.getChildAt(i) as Bitmap;
            if(child != null){
                child.smoothing = true;
            }
        }
    }

}

答案 3 :(得分:-1)

我不知道你们的人是什么?没有冒犯,只是开玩笑。我有一张桌子:-P

无论如何,提供的那些脚本完全没用!首先,你不能将uicomponent转换为位图!另一件事是,与rawchildren的秒脚本更不一样。原始孩子得到你的孩子和容器的铬 - 就是这样。如果容器中有一个按钮,则可以尝试平滑容器的镶边 - 其余部分保持不变,因为所有转换为位图都会失败。

那么,是不是rdfm?

另一方面。可以尝试stage.quality到stagequality.best。如果你检查adobe论坛http://forums.adobe.com/thread/427899,你会看到flex运行良好 - 只是空气忽略了这一点:-(

如果这两个脚本有效 - 尤其是按钮作为位图的部分 - 我会去某处粉碎我的头:-)。我在类层次结构中看不到这种方法可行。毕竟,numChildren只给你uicomponents或displayobjects,但仅此而已!