Я работаю с jjoe64's GraphView project, но у меня возникают проблемы при добавлении данных на лету. Я пытаюсь построить объемы микрофона на линейном графике, но график отказывается обновлять. Вот что у меня есть:GraphView не освежает, если не коснуться зрения?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout = (LinearLayout) findViewById(R.id.GraphLayout);
graph = new LineGraphView(this, "Sounds");
data = new GraphViewSeries(new GraphView.GraphViewData[] { new GraphView.GraphViewData(X++, 0) });
graph.addSeries(data);
graph.setManualYAxis(true);
graph.setManualYAxisBounds(32767, 0);
graph.setViewPort(3, 100);
graph.setScrollable(true);
layout.addView(graph);
final MediaRecorder media = new MediaRecorder();
media.setAudioSource(MediaRecorder.AudioSource.MIC);
media.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
media.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
media.setOutputFile("/dev/null");
try {
media.prepare();
} catch (Throwable t) {}
media.start();
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
final int amp = media.getMaxAmplitude();
MaxSoFar = Math.max(amp, MaxSoFar);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
data.appendData(new GraphView.GraphViewData(X++, amp), true);
//Here I try few different things
TextView output = (TextView)findViewById(R.id.output);
String info = MaxSoFar + "" + nl;
info += amp + "";
output.setText(info);
}
});
}
}, 0, 100);
}
Я делал много экспериментировали на линии сразу же после того, как data.appendData(...)
с вещами как graph.redrawAll();
, graph.invalidate();
или graph.postInvalidate();
, но ничего. Я могу получить граф, чтобы перерисовать, если я поместил палец и перетащил график. Любой тип сенсорного ввода приведет к правильному рисованию графика. Возможно, это связано с тем, что он находится в runOnUiThread
, но я не могу понять, почему это может быть проблемой, а не требованием.
Я отлаживаю это на своей Галактике S3, работающей на Cyanogenmod 10.1 Nightlies (Android 4.2.2).