Flex: custom Hub auf Lineseries erstellen?
-
20-09-2019 - |
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
gesetztAber 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 !!!!
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