سؤال

يمكنك بسهولة ضبط ضربة على سلسلة مثل هذا:

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

هذا سوف يضع ألفا للسكتة الدماغية بأكملها إلى .8

لكنني أريد أن أكون قادرًا على ضبط ألفا مختلفة على Stoke لكل قطعة بناءً على شيء في DataProvider.

على سبيل المثال yField في Lineseries هو "Apple" وهو ما يعرف مكان رسمه لخطوط. أريد أن أكون قادرًا على إضافة شيء مثل alphaField الذي يخبره بما يجب تعيين alpha السكتة الدماغية لكل قطعة.

لذلك إذا كان Dataprovider الخاص بي هو:

<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>

وضبطت alphaField="alpha" ثم سأصاب بسكتة دماغية صلبة من المؤامرة 0 إلى المؤامرة 1 ثم بنسبة 50 ٪ من السكتة الدماغية من المؤامرة 1 إلى المؤامرة 2.

كيف يمكنني أن أفعل هذا؟؟؟ أنا أبحث في أساليب CommiceProperties () و updatedisplaylist () من الخطوط وليس لدي أي فكرة عما يجب إضافته/تغييره لجعل هذا؟

أنا متأكد تمامًا من أن هذه الفئة يجب أن تستخدم الرسومات. lineto () لرسم كل مؤامرة ، لذلك ستحتاج بشكل أساسي إلى "الحصول على" قيمة Alphafield الحالية بطريقة أو بأخرى ، وتطبيق رسومات. خط.

شكرًا!!


تحديث

لقد اقتربت من إجابتي.

عندما أقوم بتمديد Linerenderer ، أقوم بتجاوز updatedisplaylist () الذي يستدعي الرسومات. drawpolyline ()

أقوم بتمديد الرسومات وأتجاوز الطريقة DrawPolyline () حيث أن هذا هو المكان الذي يتم فيه رسم الخط بالفعل.

يمكنني استدعاء Linestyle () هنا وتغيير ألفا الخط ...

لا يزال لدي شيء واحد لا يمكنني اكتشافه ، من داخل طريقة drawpolyline () كيف يمكنني الوصول إلى تلك البيانات التي تملي ما يجب أن يكون ألفا؟

شكرًا!!!!

هل كانت مفيدة؟

المحلول

لقد استخدمت Flex SDK 4.0 ، لكنني أعتقد أنه سيعمل على 3.4 أيضًا.

استخدم ArrayCollection بدلاً من XML ، لأنه لم يكن tsimus.

<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>

نصائح أخرى

هل حاولت استخدام عارض عنصر مخصص؟

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

هذا مجرد مثال سريع ، لكنني أعتقد أن Itemrenderer هو الطريق للذهاب.

في drawPolyLine وظيفة ستحصل عليها pts:Array. هذه مجموعة من سلسلة محددة. لسلسلة الخط ستحصل على مجموعة من LineSeriesItem أشياء. لذلك إذا كنت ترغب في الحصول على قيم محور X&Y الخاص بك. يمكنك فقط الوصول إلى xValue أو yValue خاصية أ LineSeriesItem. مثله: pts[0].xValue أو 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top