2016-04-11 25 views
0

我已经看过github资源,也有here,但我无法让我的图显示实时数据。这是我的代码。如何使用实时数据更新装饰图表?

public class Blink_HR extends Fragment { 
TextView textView; 
LinearLayout linearLayout; 
DecoView mDecoView; 
private int mBackIndex; 
private int mSeries1Index; 
private int mSeries2Index; 
private int mSeries3Index; 
private final float 
     mSeriesMax = 50f; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.blink_hr, container, false); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    textView = (TextView) getActivity().findViewById(R.id.meditation); 
    linearLayout = (LinearLayout) getView().findViewById(R.id.blinkHR); 
    mDecoView = (DecoView)getActivity().findViewById(R.id.dynamicArcView); 

    mDecoView.addEvent(new DecoEvent.Builder(mSeriesMax) 
      .setIndex(mBackIndex) 
      .setDuration(10) 
      .build()); 


    SeriesItem seriesItem = new SeriesItem.Builder(Color.parseColor("#FFE2E2E2")) 
      .setRange(0, mSeriesMax, 0) 
      .setInitialVisibility(true) 
      .build(); 

    mBackIndex = mDecoView.addSeries(seriesItem); 
} 




void update(int id, int value) { 
    String heart = String.valueOf(value); 
    Log.d("Blink Hai", heart); 

    if (value > 0 && mDecoView!=null && mSeries1Index!=0) { 
     SeriesItem seriesItem = new SeriesItem.Builder(Color.parseColor("#FFFF8800")) 
       .setRange(0, (float)value, 0) 
       .setInitialVisibility(false) 
       .build(); 
     mSeries1Index = mDecoView.addSeries(seriesItem); 
    } 

    if (mDecoView != null) { 
     mDecoView.addEvent(new DecoEvent.Builder(42.4f) 
       .setIndex(mSeries1Index) 
       .setDelay(3250) 
       .build()); 
     mDecoView.executeReset(); 
    } 
} 

}

我的更新函数被调用每1秒,我希望图表更新实时这个数据。不过,我所得到的只是屏幕上的一个飞艇。

回答

2

有一个与代码

  • 的事件mBackIndex之前加入到系列mBackIndex已初始化

  • 更新被触发每1秒钟,但3.25秒的延迟是几个问题添加到事件之前它将被处理

  • 更新事件总是将DecoView的位置设置为42.4

  • executeReset()被称为每次更新被触发时,该 复位所有系列在图表,并取消所有未决的动画

下面是一些示例代码,将更新DecoView每1秒为一个随机动画位置

public class FauxFitActivity extends AppCompatActivity { 

    private DecoView mDecoView; 
    private int mSeries1Index; 
    private final float mSeriesMax = 50f; 
    private Handler mHandler = new Handler(); 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      update(); 
      mHandler.postDelayed(this, 1000); 
     } 
    }; 

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

     mDecoView = (DecoView) findViewById(R.id.dynamicArcView); 
     createDataSeries1(); 

     // Start the timer 
     mHandler.post(runnable); 

    } 

    private void createDataSeries1() { 
     final SeriesItem seriesItem = new SeriesItem.Builder(Color.parseColor("#FFFF8800")) 
       .setRange(0, mSeriesMax, 0) 
       .setInitialVisibility(false) 
       .build(); 

     mSeries1Index = mDecoView.addSeries(seriesItem); 
    } 

    private void update() { 
     final Random rand = new Random(); 
     int newPosition = rand.nextInt((int)mSeriesMax); 

     mDecoView.addEvent(new DecoEvent.Builder(newPosition).setIndex(mSeries1Index).setDuration(1000).build()); 
    } 
}