2013-06-14 2 views
0

Я работаю с 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).

ответ

0

Проведя небольшое исследование и экспериментируя, я обнаружил, что есть this issue, где Лаусзус сказал, что у него есть this fix. Я сделал эти изменения и перестроил GraphView, и он отлично работает.

 Смежные вопросы

  • Нет связанных вопросов^_^