gpt4 book ai didi

achartengine - 在 aChartEngine 中画一条线

转载 作者:行者123 更新时间:2023-12-04 21:45:39 27 4
gpt4 key购买 nike

我希望在我触摸图表区域的位置显示一个垂直光标。与此行关联的 textview 将显示条的值,即其中点的 y 轴值。当我将手指移到右边的左边同时保持我的手指向下 [向左移动或向右移动] 时,这个垂直光标会相应地移动,textview 也会随之移动,但会显示 y 轴值移动时的新位置。

我看到 GraphicalView 有一个触摸监听器,我可以注册它以获取回调 - 但我不知道从那时起如何使用它。我也可以设法将触摸事件与某种手势监听器相关联。但是如何绘制叠加在当前图表顶部的垂直光标线?

我遇到的另一个问题是,在 onTuuch 中,当返回 true 时,我无法获得 mChart.getCurrentSeriesAndPoint(); 的值; ,总是返回 Null,但如果我将返回值更改为 False,我可以获得值,但我无法再次访问 ontuch。

这是我的代码

    mChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_CANCEL) {

dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
multiRenderer.setPanEnabled(false);
multiRenderer.setZoomEnabled(false);
SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();


if(seriesSelection != null)
{
Toast.makeText(
getActivity().getBaseContext(),"Hola",
Toast.LENGTH_SHORT).show();
}
XYSeries Line = new XYSeries("");
Line.add(event.getX()/1.5,minValue);
Line.add(event.getX()/1.5,maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {

dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
XYSeries Line = new XYSeries("");
Line.add(event.getX()/1.5,minValue);
Line.add(event.getX()/1.5,maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);

}
if (event.getAction() == MotionEvent.ACTION_UP) {

dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
mChart.repaint();
return true;
}
});

我想要这个。

dwef
(来源: subirimagenes.com)

请我需要帮助!

编辑:这是我的 onTouch 代码,当我返回 True 时;在 onTouch 中,来自 toRealPoint() 的值;和 SeriesSelection 不正确,如果我将 true 更改为 false 我可以获得真实值。请帮忙
            mChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();
double[]values = mChart.toRealPoint(0);
if(seriesSelection != null)
{
if (event.getAction() == MotionEvent.ACTION_CANCEL) {
dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {

XYSeries Line = new XYSeries("");
Line.add(seriesSelection.getXValue(),minValue);
Line.add(seriesSelection.getXValue(),maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {

dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
XYSeries Line = new XYSeries("");
Line.add(seriesSelection.getXValue(),minValue);
Line.add(seriesSelection.getXValue(),maxValue);
dataset.addSeries(Line);
multiRenderer.addSeriesRenderer(GraficaCuatro);
}
if (event.getAction() == MotionEvent.ACTION_UP) {

dataset.removeSeries(dataset.getSeriesCount()-1);
multiRenderer.removeSeriesRenderer(GraficaCuatro);
}
}

mChart.repaint();
return true;
}
});

最佳答案

为了绘制垂直光标,您必须在图表中添加一系列额外的垂直点。
chart.getCurrentSeriesAndPoint()将在可选缓冲区下返回最接近您触摸屏幕的点的内容。因此,您需要在现有点附近触摸屏幕,例如它会返回一些东西。但是,您可以将可选缓冲区设置为您想要的任何值:

renderer.setSelectableBuffer(100);

为了监听图表上的触摸事件,请像这样注册:
chartView.setOnClickListener(...);

对于一些工作代码,请查看官方 AChartEngine 演示, this一块会帮助你。

更新:另一种选择必须自己处理触摸并搜索系列以找到最近的点。您可以使用 chartView.toRealPoint()从屏幕点检索真实数据点。

关于achartengine - 在 aChartEngine 中画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14880327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com