AndroidPlot FixedSizeEditableXYSeries 如何使用
AndroidPlot FixedSizeEditableXYSeries How to use
我是 android 的新手,也是 android 情节的新手。你能指出一个使用 FixedSizeEditableXYSeries 的例子吗?
我的目标是创建一个流图,在 android 应用程序中显示最新的传感器读数。
谢谢
===================更新-与@Nick讨论后=================== =
public class MainActivity extends AppCompatActivity {
// Create the redrawer so that the plot is updated
private Redrawer redrawer;
// create the message receiver - data is received via broadcasts
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("CurrentHR");
Log.d("ReceivedHR ",message);
// Now put the new data point at the end of the FixedSizeEditableXYSeries, move all data points by 1.
for (int index=0;index<9;index++){
if(index<9){
hrHistory.setY(hrHistory.getY(index+1),index);
}else{
hrHistory.setY(Float.parseFloat(message),9);
}
}
}
};
// create a few references
private XYPlot xyPlot;
private FixedSizeEditableXYSeries hrHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_heart_rate);
// Now find the plot views
xyPlot = (XYPlot)findViewById(R.id.xyPlot);
// Declare the local broadcast manager
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("hrUpdate"));
// now put in some data
hrHistory = new FixedSizeEditableXYSeries("HR",10);
xyPlot.addSeries(hrHistory, new LineAndPointFormatter(Color.GREEN,Color.RED,null,null));
xyPlot.setRangeBoundaries(40, 120, BoundaryMode.FIXED);
xyPlot.setDomainBoundaries(0, 20, BoundaryMode.FIXED);
}
@Override
protected void onResume(){
super.onResume();
// set a redraw rate of 1hz and start immediately:
redrawer = new Redrawer(xyPlot, 1, true);
}
}
这给了我一个漂亮的图表,但没有线条。随着新数据填充 FixedSizeEditableXYSeries,情节似乎没有更新。
如果您想要滚动行为,那么 FixedSizeEditableXYSeries
将是错误的选择;当你的数据滚动时,你实际上是在排队最新的值并出队最旧的值;链表类型结构将是更好的选择。
您可以实现 XYSeries
并使用您喜欢的任何合适的数据结构支持它,或者您可以使用 SimpleXYSeries
,它已经支持队列操作 removeFirst()
和 addLast(...)
。演示应用程序中有一个很好的动态滚动图示例:OrientationSensorExampleActivity. Lines 235-245 显示上面提到的具体操作。
我是 android 的新手,也是 android 情节的新手。你能指出一个使用 FixedSizeEditableXYSeries 的例子吗?
我的目标是创建一个流图,在 android 应用程序中显示最新的传感器读数。
谢谢
===================更新-与@Nick讨论后=================== =
public class MainActivity extends AppCompatActivity {
// Create the redrawer so that the plot is updated
private Redrawer redrawer;
// create the message receiver - data is received via broadcasts
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("CurrentHR");
Log.d("ReceivedHR ",message);
// Now put the new data point at the end of the FixedSizeEditableXYSeries, move all data points by 1.
for (int index=0;index<9;index++){
if(index<9){
hrHistory.setY(hrHistory.getY(index+1),index);
}else{
hrHistory.setY(Float.parseFloat(message),9);
}
}
}
};
// create a few references
private XYPlot xyPlot;
private FixedSizeEditableXYSeries hrHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_heart_rate);
// Now find the plot views
xyPlot = (XYPlot)findViewById(R.id.xyPlot);
// Declare the local broadcast manager
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("hrUpdate"));
// now put in some data
hrHistory = new FixedSizeEditableXYSeries("HR",10);
xyPlot.addSeries(hrHistory, new LineAndPointFormatter(Color.GREEN,Color.RED,null,null));
xyPlot.setRangeBoundaries(40, 120, BoundaryMode.FIXED);
xyPlot.setDomainBoundaries(0, 20, BoundaryMode.FIXED);
}
@Override
protected void onResume(){
super.onResume();
// set a redraw rate of 1hz and start immediately:
redrawer = new Redrawer(xyPlot, 1, true);
}
}
这给了我一个漂亮的图表,但没有线条。随着新数据填充 FixedSizeEditableXYSeries,情节似乎没有更新。
如果您想要滚动行为,那么 FixedSizeEditableXYSeries
将是错误的选择;当你的数据滚动时,你实际上是在排队最新的值并出队最旧的值;链表类型结构将是更好的选择。
您可以实现 XYSeries
并使用您喜欢的任何合适的数据结构支持它,或者您可以使用 SimpleXYSeries
,它已经支持队列操作 removeFirst()
和 addLast(...)
。演示应用程序中有一个很好的动态滚动图示例:OrientationSensorExampleActivity. Lines 235-245 显示上面提到的具体操作。