2016-04-14 16 views
0

AndroiPlot kullanarak gerçek zamanlı çizgi grafiği çiziyorum. Maksimum pencereye ulaştığında çizimin soldan yeniden başlatılması gerekiyor. X ekseni değerini 0'a sıfırlayabiliyorum ve soldan çizim yapmaya başlayabiliyorum. Fakat resimde her zaman resimde gösterildiği gibi sağdan sola doğru bir çizgi vardır. Birisi bana doğru şekilde çizim yapmam için bana yardımcı olabilir.AndroidPlot gerçek zamanlı ekranın sağ köşesine ulaştıktan sonra soldan arsa çizimi

private void addEntryGraph0() { 
    if (series0.size() > WINDOW_SIZE) { 
     for (int i = 0; i < sampleRatio; i++) 
      series0.removeFirst(); 
    } 
    // add the latest sample: 
    for (int i = 0; i < sampleRatio; i++) { 
     if(xVal1>WINDOW_SIZE){ 
      xVal1 =0; 
      series0.addLast(xVal1, ch0Buffer.get(i)); 
     } 
     else{ 
      xVal1++; 
      series0.addLast(xVal1, ch0Buffer.get(i)); 
     } 
    } 
    // redraw the Plots: 
    plot0.redraw(); 
    synchronized (ch0Buffer) { 
     ch0Buffer.subList(0, sampleRatio).clear(); 
    } 
} 

enter image description here

+0

Tahminim, çizim verilerinin düzgün şekilde temizlenememesi. Bazı günlük ifadeleri ekleyin veya kesme noktalarına sahip bir hata ayıklayıcısını kullanın ve grafiğin sol kenarına geri döndüğünüzde çizim verisinin temizlendiğini kontrol edin. – Karakuri

cevap

1

indeksleme kapalı gibi görünüyor; Bu, rastgele bir yatay çizgi değil, veri kümenizin son görünür noktası ile ilk görünür nokta arasındaki bir çizgi; İlk görünür nokta i + 1 iken, son görünür nokta aslında verilerinizde yer alır. Androidplot, serilerindeki tüm noktalara adım atıyor ve bunları değere göre çiziyor.

Bu kod:

if(xVal1>WINDOW_SIZE){ 
    xVal1 =0; 
    series0.addLast(xVal1, ch0Buffer.get(i)); 
} 

ne görüyorsanız açıklıyor geri x başlangıcında bir XVal tüm yol vardır senin veri kümesi sonuna kadar yeni bir nokta ekler.

Elinizde olanla ilerlemek için bir çözüm, xval'inizi 0'a sıfırlamadan hemen önce veri kümesine boş bir değer eklemektir; Androidplot bu noktadaki satırı sonlandıracak ve başka bir boş olmayan değerle karşılaştığında yeni bir satır başlatacak. Bununla birlikte, ne yapmaya çalıştığınız göz önüne alındığında, itme/patlatma yerine dairesel bir arabellek kullanmayı öneririm. Daha hızlı, daha basit ve tam istediğiniz gibi davranacaktır.

+0

Teşekkürler Nick !! Ben başka bir şekilde uyguladıysanız ... (xVal1> WINDOW_SIZE) { series0.addLast (xVal1% WINDOW_SIZE, ch0Buffer.get (i)); }. Her ikisi de aynı etkiye sahiptir. – somia