我正在與一個LineChart
與CategoryAxis
水平軸和我需要每個類別都有一個非常自定義的格式顯示。使用CategoryAxis.LabelFunction
對於我的目的來說功能不夠強大,因爲它只允許自定義Label對象的文本字段的格式。特別是對於這個項目,我需要每個類別都是一個網格或兩個不同的多行標籤的HGroup。左邊的標籤需要左對齊,右邊對齊。自定義AxisRenderer
我嘗試創建一個自定義類,extends Group
和implements IDataRenderer
。然而,public function set data(value:Object)
,在IDataRenderer
定義,似乎總是具有值被稱爲一個AxisLabel
對象,其不內它傳遞一個對象,只是一個字符串(AxisLabel.text
)
作爲劈-EY替代方案中,我嘗試使用LabelFunction傳遞編碼的字符串,但即使這樣也會導致問題。不知怎的,這個代碼會導致沒事就爲CategoryAxis要顯示:
public class HeatmapAxisLabelRenderer
extends HGroup
implements IDataRenderer
{
public function HeatmapAxisLabelRenderer()
{
super();
this.includeInLayout = true;
this.visible = true;
this.width = 100;
this.height = 40;
// this.percentWidth = 100;
// this.percentHeight = 100;
}
// Internal variable for the property value.
private var _data:Object;
// Make the data property bindable.
[Bindable("dataChange")]
// Define the getter method.
public function get data():Object {
return _data;
}
// Define the setter method, and dispatch an event when the property
// changes to support data binding.
public function set data(value:Object):void {
_data = value;
if (value is AxisLabel && AxisLabel(value).text!=null) {
var parts:Array = AxisLabel(value).text.split("|~|");
if (parts.length != 2) return;
var name:Label = new Label();
name.text = parts[0];
name.setStyle("textAlign","left");
name.width = 100;
var limit:Label = new Label();
limit.text = parts[1];
limit.setStyle("textAlign","right");
limit.width = 100;
this.addElement(name);
this.addElement(limit);
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
} else {
trace("renderer bad value");
}
}