gpt4 book ai didi

android - 当 scrollToEnd 为真时,GraphView 在实时模式下显示错误的图形

转载 作者:行者123 更新时间:2023-11-29 17:30:32 24 4
gpt4 key购买 nike

我正在对加速度计传感器进行采样并实时显示图表,使用 Graph View库 (4.0.1)。

该应用程序运行良好,但图表有误:

enter image description here

正如您在图片中看到的,Z 轴(洋红色)的值为 ~9.8 但在图中显示为 ~15,Y 轴(绿色)的值为 0.2 但在图中我们在零下方与 X 轴相同的想法。

这是我的代码:

SensorManager sensorManager;
TextView tvX, tvY, tvZ;
GraphView graph;
LineGraphSeries<DataPoint> seriesX, seriesY, seriesZ;
long startTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_runtime_graph);

tvX = (TextView) findViewById(R.id.tvAcc_X); // color : blue
tvY = (TextView) findViewById(R.id.tvAcc_Y); // color : green
tvZ = (TextView) findViewById(R.id.tvAcc_Z); // color : magenta
graph = (GraphView) findViewById(R.id.graph);

seriesX = new LineGraphSeries<>();
seriesY = new LineGraphSeries<>();
seriesZ = new LineGraphSeries<>();

seriesX.setColor(Color.BLUE);
seriesY.setColor(Color.GREEN);
seriesZ.setColor(Color.MAGENTA);

graph.addSeries(seriesX);
graph.addSeries(seriesY);
graph.addSeries(seriesZ);

startTime = System.nanoTime() / 100000000;

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
public void onSensorChanged(SensorEvent event)
{
tvX.setText(String.valueOf(event.values[0]));
tvY.setText(String.valueOf(event.values[1]));
tvZ.setText(String.valueOf(event.values[2]));

updateGraph((event.timestamp / 100000000) - startTime,
event.values[0], event.values[1], event.values[2]);
}

void updateGraph (final long timestamp, final float x, final float y, final float z)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
seriesX.appendData(new DataPoint(timestamp, x), true, 40);
seriesY.appendData(new DataPoint(timestamp, y), true, 40);
seriesZ.appendData(new DataPoint(timestamp, z), true, 40);
}
});
}

我发现问题发生在 scrollToEnd 字段设置为 true 时,否则图表是正确的。我发现的另一个问题可能是相关的,当 scroolToEnd 为真时,轴不会更新。

有什么办法可以解决这个问题吗?谢谢!

最佳答案

logcat 显示了为什么 scrollToEnd 在您的情况下不起作用:

GraphView: scrollToEnd works only with manual x axis bounds

要手动设置 x 轴边界,请在您的创建方法中添加此代码

Viewport vp = graph.getViewport();
vp.setXAxisBoundsManual(true);
vp.setMinX(0);
vp.setMaxX(1000);

但是代码还有一个问题:System.nanoTime()event.timestamp是不同的时间格式

System.nanoTime() // current value of system timer in nanoseconds
event.timestamp // nanoseconds since device uptime

这没有很好的记录:SensorEvent timestamp

另请参阅:Accelerometer SensorEvent timestamp

关于android - 当 scrollToEnd 为真时,GraphView 在实时模式下显示错误的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215733/

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