Frage

Sie können einen Schlaganfall auf einer Linie Serien wie diese einfach eingestellt:

<mx:LineSeries yField="apple">
    <mx:lineStroke>
        <mx:Stroke 
                    color="0x6699FF" 
                    weight="4" 
                    alpha=".8"
        />
    </mx:lineStroke>
</mx:LineSeries>

Dies wird Alpha für den gesamten Hub auf 0,8

gesetzt

Aber ich will für jede Handlung basiert auf etwas, im Datenprovider einen anderen Alpha auf dem stoke einstellen können.

Zum Beispiel der yField in dem Lineseries ist „Apple“ das ist, wie sie weiß, wo für die Lineseries plotten. Ich möchte in der Lage, so etwas wie alphaField hinzuzufügen, die es sagt, was für jeden Plot den Hub alpha zu setzen.

so, wenn meine Datenprovider waren:

<result month="Jan-04">
    <apple>81768</apple>
    <alpha>1</alpha>
</result>
<result month="Feb-04">
    <apple>51156</apple>
    <alpha>1</alpha>
</result>
<result month="Mar-04">
    <apple>51156</apple>
    <alpha>.5</alpha>
</result>

Und ich Set alphaField="alpha" dann würde ich einen festen Takt 0 von Grundstück hat 1 zu plotten und dann einen 50% alpha Hub von Plot 1 bis 2 plottet.

Wie kann ich dies tun ??? Ich bin auf der Suche in den commitProperties () und update () -Methode von Lineseries und haben keine Ahnung, was das werden müßte hinzugefügt / geändert machen?

Ich bin ziemlich sicher, hat diese Klasse Graphics.lineTo () zu verwenden, um jede Handlung zu ziehen, so dass im Grunde wäre es müssen „get“ den aktuellen Wert alphaField irgendwie, und geben Sie eine Graphics.lineStyle () mit dem richtigen alpha vor jeder Linie zu zeichnen.

Danke !!


UPDATE

Ich habe viel näher an meine Antwort bekommen.

Wenn ich LineRenderer ich überschreiben update extend (), die GraphicsUtilities.drawPolyLine nennt ()

Ich erweitere GraphicsUtilities und überschreiben die Methode drawPolyLine (), wie das ist, wo die Linie tatsächlich gezogen wird.

Ich kann hier linestyle () aufrufen und die Alpha der Linie ändern ...

ich noch 1, was habe ich kann nicht herausfinden, aus dem drawPolyLine () -Methode wie kann ich das Daten zugreifen, die diktiert, was die Alpha enthalten sein sollte?

Danke !!!!

War es hilfreich?

Lösung

verwendet I Flex SDK 4.0, aber ich glaube, es wird auch auf 3.4 arbeiten.

Gebraucht Arraycollection statt XML, weil es nicht der tsimus war.

<mx:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/halo" >

    <fx:Script><![CDATA[
        import mx.charts.ChartItem;
        import mx.charts.renderers.CircleItemRenderer;
        import mx.collections.ArrayCollection;
        import mx.graphics.IFill;
        import mx.graphics.SolidColor;
        import mx.graphics.Stroke;

        import st.model.ViewModelLocator;

        [Bindable]
        private var modelLocator:st.model.ViewModelLocator = ViewModelLocator.getInstance() ;

        [Bindable]
        public var dp :ArrayCollection = new ArrayCollection([
            { test:0.1,alpha: 1 },
            { test:0.2,alpha: 0.5 },
            { test:0.3,alpha: 0.75 },
            { test:0.4,alpha: 0.25 },
            { test:0.5,alpha: 0.5 }
        ]);

        private function myFillFunction(element:ChartItem, index:Number):IFill {
            return new SolidColor(0x6699FF,Number(element.item.alpha));
        }
    ]]></fx:Script>

    <mx:ColumnChart id="myChart" dataProvider="{dp}">
        <mx:series>
            <mx:LineSeries lineStroke="{new Stroke(0x6699FF,4,0.1)}" width="100" height="100" yField="test" fillFunction="{myFillFunction}" itemRenderer="{new ClassFactory(mx.charts.renderers.CircleItemRenderer)}" />
        </mx:series>
    </mx:ColumnChart>

</mx:Application>

Andere Tipps

Haben Sie versucht, eine benutzerdefinierte Elementrenderers mit?

<mx:LineSeries>
  <mx:itemRenderer>
    <mx:Component>
      <mx:BoxItemRenderer scaleX="1" scaleY="1" alpha="{data.alpha}"/>
    </mx:Component>
  </mx:itemRenderer>
</mx:LineSeries>

Dies ist nur ein kleines Beispiel, aber ich denke, die itemRenderer sind der Weg zu gehen.

In drawPolyLine Funktion werden Sie pts:Array erhalten. Dies ist ein Array des spezifischen SeriesItem. Für Line-Serie finden Sie eine Reihe von LineSeriesItem Objekten erhalten. Also, wenn Sie Ihre x & y-Achse Werte erhalten möchten. Sie greifen nur die xValue oder yValue Eigenschaft eines LineSeriesItem. wie folgt aus: pts[0].xValue oder pts[0].yValue


public static function drawPolyLine(g:Graphics, pts:Array,
                                     start:int, end:int,
                                     hProp:String, vProp:String,
                                     stroke:IStroke, form:Object,
                                     moveToStart:Boolean = true):void
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top