Flash 如何将flex LineSeries中的数据点拖动到图表中的新位置
我需要将数据点拖动到LineSeries中的新位置。当用户使用鼠标指针拖动数据点时,应该动态执行此操作 我在flex的线形图控件中尝试了如下选项:dragmovenabled=“true”dragEnabled=“true”dropEnabled=“true”,如下所示Flash 如何将flex LineSeries中的数据点拖动到图表中的新位置,flash,apache-flex,actionscript,Flash,Apache Flex,Actionscript,我需要将数据点拖动到LineSeries中的新位置。当用户使用鼠标指针拖动数据点时,应该动态执行此操作 我在flex的线形图控件中尝试了如下选项:dragmovenabled=“true”dragEnabled=“true”dropEnabled=“true”,如下所示 <mx:LineChart id="linechart1" selectionMode="multiple" showAllDataTips="true" showDataTipTargets="true" dragMov
<mx:LineChart id="linechart1" selectionMode="multiple" showAllDataTips="true" showDataTipTargets="true" dragMoveEnabled="true" dragEnabled="true" dropEnabled="true">
但它不起作用
谁能告诉我如何做到这一点
谢谢…我认为没有标准的FlexAPI来解决这个问题。您可以通过控制用户与数据点的交互,以另一种方式实现 这是我的解决方案和解决方案 用户可以获取任何数据点并将其上下拖动。新位置可以通过使用任何序列的localToDate方法转换鼠标坐标来计算 重要的一点是要考虑图表位置和绘图实际起点之间的距离。为此,我使用常量CHART_GUTTERTOP 守则:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import mx.charts.events.ChartItemEvent;
import mx.charts.series.items.LineSeriesItem;
import mx.collections.ArrayCollection;
[Bindable]public var expenses:ArrayCollection = new ArrayCollection([
{Month:"Jan", Profit:2000, Expenses:1500, Amount:450},
{Month:"Feb", Profit:1000, Expenses:200, Amount:600},
{Month:"Mar", Profit:2200, Expenses:800, Amount:300},
{Month:"Apr", Profit:1800, Expenses:400, Amount:400}
]);
private var currentId:int = -1;
private var currentYField:String;
private const CHART_GUTTERTOP:int = 20;
protected function myChart_itemMouseDownHandler(event:ChartItemEvent):void
{
if (event.hitData != null)
{
var chartItem:LineSeriesItem = event.hitData.chartItem as LineSeriesItem;
currentId = chartItem.index;
currentYField = (chartItem.element as LineSeries).yField;
}
}
protected function myChart_itemMouseUpHandler(event:ChartItemEvent):void
{
if (currentId != -1)
{
var p:Point = new Point(myChart.mouseX, myChart.mouseY - CHART_GUTTERTOP);
var d:Array = series1.localToData(p);
expenses.getItemAt(currentId)[currentYField] = d[1];
myChart.dataProvider = expenses;
currentId = -1;
}
}
]]>
</fx:Script>
<s:Panel x="20" y="20">
<s:VGroup>
<mx:LineChart
id="myChart"
gutterTop="{CHART_GUTTERTOP}"
dataProvider="{expenses}"
showDataTips="true"
itemMouseDown="myChart_itemMouseDownHandler(event)"
itemMouseUp="myChart_itemMouseUpHandler(event)">
<mx:horizontalAxis>
<mx:CategoryAxis
dataProvider="{expenses}"
categoryField="Month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries id="series1"
yField="Profit"
displayName="Profit"/>
<mx:LineSeries
yField="Expenses"
displayName="Expenses"/>
</mx:series>
</mx:LineChart>
<mx:Legend dataProvider="{myChart}"/>
</s:VGroup>
</s:Panel>
</s:Application>
是否可以在两个方向(沿X和Y轴)或仅垂直(沿Y轴)移动点?