jjoe64 の 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
Cyanogenmod 10.1 Nightlies (Android 4.2.2) を実行している Galaxy S3 でこれをデバッグしています。