|
AHHHHHHHH. You using Flex 2! Then I have a very, very
different answer for you.
Flex 2 has moved to a model more like datagrid's item
renderers. In flex 2, you can specify an itemSkin class for a column series, and
it will create one for every column on the chart.
You want to define a custom skin class, and assign it to
the series as so:
<mx:ColumnSeries itemSkin="CycleSkin"
/>
item skins are instantiated for each item in the data
provider, and each one is passed an instance of mx.charts.ChartItem. The chart
item knows the item from the dataProvider it represents, and what its index was
in the dataProvider.
Here's a sample skin that should cycle
colors:
import
mx.charts.series.items.ColumnSeriesItem;
import mx.skins.ProgrammaticSkin;
import mx.core.IDataObject;
public class CycleSkin extends
mx.skins.ProgrammaticSkin implements IDataObject
{
private var colors:Array =
[0xFF0000,0x00FF00,0x0000FF];
public function CycleSkin() { } private var _chartItem:ColumnSeriesItem; public function get data():Object
{return _chartItem;} public function set
data(value:Object):void
{ _chartItem = value as
ColumnSeriesItem;
invalidateDisplayList();
} override protected function
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var g:Graphics = graphics; g.clear(); g.moveTo(rc.left,rc.top);
g.beginFill(colors[(_chartItem == null)?
0:_chartItem.index]);
g.lineTo(rc.right,rc.top); g.lineTo(rc.right,rc.bottom); g.lineTo(rc.left,rc.bottom); g.lineTo(rc.left,rc.top);
g.endFill();
} }
}
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Jonathan Miranda Sent: Thursday, February 16, 2006 10:54 AM To: [email protected] Subject: RE: [flexcoders] Column Chart coloring Sooooo close, I got it
all to compile but the following. I can’t figure out how to do these functions
on “target” because it’s a IFlexDisplayObject, and all those functions are from
the graphics class and take an “Object”. How can I use these functions on the
“target” if it’s not an Object? Extend it somehow or create an
object?
target.beginFill( fills[count] );
target.moveTo(rc.left,rc.top);
target.lineTo(rc.right,rc.top);
target.lineTo(rc.right,rc.bottom);
target.lineTo(rc.left,rc.bottom);
target.lineTo(rc.left,rc.top);
target.endFill();
count++;
} _________________________________________ Jonathan
Miranda Flexible
Master of the Web "In the game of
chess, it's important to never let your opponent see your
pieces." From:
I'll leave making it
compile as an exercise for the reader, but something
like: class CycleRenderer implements
BoxRenderer private var
count:Number; function
CycleRenderer() count
= 0; function
draw(target:UIObject, rc : Rect) target.moveTo(rc.left,rc.top); target.endFill();
count++; function
endDraw(target:UIObject) count =
0; Ely.
From:
Hmm, after messing
around with this I can’t get it to cycle any type of array because it seems to
only accept one color…and I can’t figure out how the renderer can reference
which item it’s actually on. Best I’ve got so far is just changing one color.
Fill (heh, bad joke) up to mocking an example? _________________________________________ Jonathan
Miranda Flexible
Master of the Web "In the game of
chess, it's important to never let your opponent see your
pieces." From:
You could write a
custom renderer for the chart that ignores the colors passed in and just cycles
through a pre-defined array of colors. Ely. From:
Also, something else I’m having
trouble finding documentation on…. _________________________________________ Jonathan
Miranda Flexible Master
of the Web "In the game of chess, it's important to
never let your opponent see your pieces." -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
SPONSORED LINKS
YAHOO! GROUPS LINKS
|

