我在Air应用程序,一个问题,三个按钮中做了一个琐事,在你选择一个之后,右边的按钮变成绿色,错误的按钮变成红色。我试图改变样式,所以我创建了一个Button.Right和一个Button.Wrong样式,但我还需要禁用按钮,这样当我显示正确的答案时,它们不会被多次点击
所以我在制作它时遇到了麻烦,所以当我将启用的属性设置为false时,按钮看起来并不灰白,并且alpha被调低了。
我试图在这里尽可能地保持简约,在css文件中更改disabled-overlay-alpha或disabledOverlayAlpha似乎没有做到这一点,也没有改变disabledBorderColor
要做到这一点的任何快速技巧吗?
答案 0 :(得分:3)
这可能是一种有点肮脏的解决方法,但您可以尝试通过将mouseEnabled
属性设置为false
来禁用按钮,以禁止它们与鼠标进行交互。
答案 1 :(得分:1)
我一直使用有状态的皮肤来实现这一目标。它相对容易,但这就是我要做的事情:
CSS(路径根据您的资产而变化):
Button {
skin:ClassReference('com.mysite.assets.skins.MyStatefulSkin');
}
然后,在/ com / mysite / assets / skins中,您将拥有:
package com.mysite.assets.skins {
import flash.display.GradientType;
import mx.containers.Canvas;
public class MyStatefulSkin extends Canvas {
import flash.display.Graphics;
import flash.geom.Rectangle;
import mx.graphics.GradientEntry;
import mx.graphics.LinearGradient;
public function MyStatefulSkin() {
super();
}
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth,unscaledHeight);
var w:Number = unscaledWidth;
var h:Number = unscaledHeight;
var cr:Number = getStyle('cornerRadius');
var backgroundFillColors:Array;
var g:Graphics = graphics;
g.clear();
switch( name ){
case "upSkin":
backgroundFillColors = [0xffffff,0xdddddd];
break;
case "overSkin":
backgroundFillColors = [0xffffff,0xdddddd];
break;
case "downSkin":
backgroundFillColors = [0xffffff,0xdddddd];
break;
case "disabledSkin":
backgroundFillColors = [0xffffff,0xdddddd];
break;
}
// Draw Background
g.beginGradientFill( GradientType.LINEAR, backgroundFillColors, [1.0,1.0], [0,255], verticalGradientMatrix( 0, 0, w, h ) );
g.drawRoundRectComplex( 0, 0, w, h, cr, cr, cr, cr );
g.endFill();
// Draw other things (borders, icons, etc)
}
}
}
有时我不使用帆布,有时候我也不使用帆布。我使用的东西让我在实际资产中具有灵活性。然而,这个想法保持不变,这允许你为你的皮肤设置状态,你可以根据皮肤不同地对待事物。
答案 2 :(得分:0)
就个人而言,我认为你应该扩展你使用的任何组件并添加状态(correctNormal,correctDisabled,wrongNormal,wrongDisable),并根据给予组件的属性适当地改变状态。有了这个,您可以非常轻松地指定所有内容的外观。如果您使用Flex 4,会更容易。