在深入研究 [Embed] 标签并分析它的方法后,我想出了如何在每次调整大小时不用一堆位图或重新绘制图形的情况下进行 scale9Grid。
scale9Grid 仅影响绘图 API 图形(或 Graphics 对象) - 不直接影响位图。因此,您必须将位图绘制到 Shape 或 Sprite 的图形对象:
shape.graphics.beginBitmapFill(bitmapData);
诀窍是为每个切片做一个单独的填充,但只是第一次:
var rect:Rectangle = new Rectangle(20, 20, 60, 10);
var gridX:Array = [rect.left, rect.right, bitmapData.width];
var gridY:Array = [rect.top, rect.bottom, bitmapData.height];
shape.graphics.clear();
var left:Number = 0;
for (var i:int = 0; i < 3; i++) {
var top:Number = 0;
for (var j:int = 0; j < 3; j++) {
shape.graphics.beginBitmapFill(bitmapData);
shape.graphics.drawRect(left, top, gridX[i] - left, gridY[j] - top);
shape.graphics.endFill();
top = gridY[j];
}
left = gridX[i];
}
shape.scale9Grid = rect;
记得做一个 endFill() 否则它不会工作。准备好形状后,您只需添加 scale9Grid Rectangle 即可完成所有设置 - 完美的位图缩放,无需额外的显示对象或不断重绘。