Разделяете 255 на количество ваших пунктов меню. Или даже плюс один. Т.е. если у вас 5 пунктов, вам нужно 255/6. И дальше рисуете градиент в каждом из ваших пунктов меню с нужными значениями.
Есть еще такая радость:

Код:
Number.prototype.HEXtoRGB = function() {
return {rb:this >> 16, gb:(this >> 8) & 0xff, bb:this & 0xff};
};
Color.prototype.blendRGB = function(c1, c2, t) {
if (arguments.length == 2) {
t = c2;
c2 = this.getRGB();
}
if (t<-1) {
t = -1;
} else if (t>1) {
t = 1;
}
if (t<0) {
t = 1+t;
}
c1 = c1.HEXtoRGB();
c2 = c2.HEXtoRGB();
var ct = (c1.rb+(c2.rb-c1.rb)*t) << 16 | (c1.gb+(c2.gb-c1.gb)*t) << 8 | (c1.bb+(c2.bb-c1.bb)*t);
this.setRGB(ct);
return ct;
};
Теперь у класса Color есть метод blendRGB, который позволяет смешивать два цвета в заданной пропорции.
Дальше просто:

Код:
import flash.geom.Matrix;
var topcolor=0xcccccc;
var bottomcolor=0x333333;
var itemarr=Array(btn1,btn2,btn3,btn4,btn5);
c=new Color();
var startcolor=topcolor;
for(var i=0;i<itemarr.length;i++){
endcolor=c.blendRGB(topcolor,bottomcolor,i/(itemarr.length-1));
drawGradient(itemarr[i],startcolor,endcolor);
startcolor=endcolor;
}
function drawGradient(mc,sc,ec){
var bbox=mc.getBounds();
var gmtrx:Matrix=new Matrix();
gmtrx.createGradientBox(bbox["xMax"]-bbox["xMin"],bbox["yMax"]-bbox["yMin"],Math.PI/2);
mc.beginGradientFill("linear",[sc,ec],[100,100],[0,255],gmtrx);
mc.moveTo(bbox["xMin"],bbox["yMin"]);
mc.lineTo(bbox["xMax"],bbox["yMin"]);
mc.lineTo(bbox["xMax"],bbox["yMax"]);
mc.lineTo(bbox["xMin"],bbox["yMax"]);
mc.lineTo(bbox["xMin"],bbox["yMin"]);
mc.endFill();
}
Я не уверен, что вам нужны квадратные кнопки. Хотя и это можно пофиксить.
Удачи вам.
Хотя я бы делал именно тем вариантом, который вы назвали грязным и неправильным.