我有一个列显示图片图标(S)的DataGrid。这是通过使用特殊的CellRenderer来完成的。在CellRenderer中可以找到列宽吗?this.width总是返回一个明显错误的数字(152),而不管实际的列宽是多少。我在PC和Android上都试过了。
我需要知道列宽才能使图片居中。使用静态变量将实际列宽传递给CellRenderer可能是可能的,但我想知道我是否忽略了一些明显的东西。
import fl.controls.listClasses.CellRenderer;
import flash.geom.Point;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.utils.*;
import flash.events.*;
public class CustomImageCellRenderer extends CellRenderer
{
public function CustomImageCellRenderer()
{
var iconClass : Class = getDefinitionByName("icon") as Class;
var iconMC : MovieClip = new iconClass();
trace("width=" + width); // always returns 152
addChild(iconMC );
}
override protected function drawBackground():void
{
var skin : Object;
if (_listData.index % 2 == 0)
{
skin = CellRenderer_upSkin2;
} else {
skin = CellRenderer_upSkin;
}
setStyle("upSkin", skin);
setStyle("overSkin", skin);
setStyle("downSkin", skin);
setStyle("selectedOverSkin", skin);
setStyle("selectedDownSkin", skin);
setStyle("selectedUpSkin", skin);
super.drawBackground();
}
}发布于 2016-09-19 21:36:58
在重写的drawBackground方法中使用this.width:
override protected function drawBackground():void
{
super.drawBackground();
trace("width=" + this.width);
}发布于 2016-09-19 15:23:17
通常,你应该在updateDisplayList中做所有的布局工作--这是你应该得到正确尺寸的地方:
override protected function updateDisplayList(unscaledwidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
icon.x = int((unscaledWidth - icon.width)/2);
}https://stackoverflow.com/questions/39563069
复制相似问题