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?

public function draw(target:IFlexDisplayObject, rc:Rectangle):void { 

                                      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: [email protected] [mailto:[email protected]] On Behalf Of Ely Greenfield
Sent: Thursday, February 16, 2006 11:27 AM
To: [email protected]
Subject: RE: [flexcoders] Column Chart coloring

 

 

 

I'll leave making it compile as an exercise for the reader, but something like:

 

class CycleRenderer implements BoxRenderer
{
 private var fills = [0xFF0000,0x00FF00,0x0000FF];

 private var count:Number;

 

 function CycleRenderer()
 {
 }
 
 function beginDraw(target: UIObject, fill:Fill, stroke: Stroke, sampleCount : Number)
 {

    count = 0;
 }

 

 function draw(target:UIObject, rc : Rect)
 {  
  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++;
 }

 

 function endDraw(target:UIObject)
 {
 }
 
 function drawPreview(target:UIObject, rc: Rect, fill : Fill, stroke : Stroke)
 {

   count = 0;
   draw(target, rc);    
 }
}

 

Ely.


 


From: [email protected] [mailto:[email protected]] On Behalf Of Jonathan Miranda
Sent: Thursday, February 16, 2006 10:19 AM
To: [email protected]
Subject: RE: [flexcoders] Column Chart coloring

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: [email protected] [mailto:[email protected]] On Behalf Of Ely Greenfield
Sent: Thursday, February 16, 2006 10:44 AM
To: [email protected]
Subject: RE: [flexcoders] Column Chart coloring

 

 

 

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: [email protected] [mailto:[email protected]] On Behalf Of Jonathan Miranda
Sent: Thursday, February 16, 2006 9:30 AM
To: [email protected]
Subject: [flexcoders] Column Chart coloring

Also, something else I’m having trouble finding documentation on….

I need to step through colors – let’s say red,white,blue. It’s one ColumnSeries – is there a way I can cycle through colors for each column?

_________________________________________

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
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




Reply via email to