我正在使用 MpAndroidChart 库和 DynamicalAdding 活动来获取实时图形。我的实时数据来自处理程序。我正在将此数据传递给 addEntry() 函数。现在这个函数被正确调用并绘制了一些值但是当图形占用所有可用空间时在 scrren 上它不会自动滚动。请给我修改后的解决方案代码。下面是我的代码:
public class DynamicalAddingActivity extends Activity implements OnChartValueSelectedListener {
BluetoothSerialService mSerialService = null;
private LineChart mChart;
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch(msg.what){
case BluetoothSerialService.SUCCESS_CONNECT:
/*BluetoothSerialService.connectedThread = new BluetoothSerialService.ConnectedThread((BluetoothSocket)msg.obj);
Toast.makeText(getApplicationContext(), "Connected!", 0).show();
String s = "successfully connected";*/
BluetoothSerialService.connectedThread.start();
break;
case BluetoothSerialService.MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
String strIncom;
try {
String mystr = new String(readBuf,"UTF-8");
Log.d("strIncom", mystr);
String[] params = mystr.split(" ");
for(int i=0;i<params.length;i++){
String temp = params[i];
temp=temp.trim();
String [] parts=temp.split(",");
int len=parts.length;
if(len==3){
//Accel-X
String x=parts[0];
x=x.replace("0","");
x=x.trim();
double value1;
int c1=x.indexOf("-,1");
int count1=StringUtils.countMatches(x, "-");
if( x.length()==1&& x.indexOf("-")==0){
value1=1.0;
}
else if(x==" "&&x.isEmpty()==true){
value1=1.0;
}
else if(x.length()==0){
value1=1.0;
}
else if(count1>1 &&c1!=-1){
value1=1.0;
}
else if(x.indexOf("-",1)!=-1){
value1=1.0;
}
else{
value1 = Double.parseDouble(x);
}
Log.d("Accel-X",String.valueOf(value1));
addEntry(value1);
}}}
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_linechart_noseekbar);
BluetoothSerialService.gethandler(mHandler);
mChart = (LineChart) findViewById(R.id.chart1);
mChart.setOnChartValueSelectedListener(this);
mChart.setDrawYValues(false);
mChart.setDrawGridBackground(false);
mChart.setDescription("");
mChart.scrollBy(100, 0);
addEmptyData();
mChart.invalidate();
}
int[] mColors = ColorTemplate.VORDIPLOM_COLORS;
private void addEntry(double value1) {
float v=(float) value1;
LineData data = mChart.getData();
if(data != null) {
LineDataSet set = data.getDataSetByIndex(0);
// set.addEntry(...);
if (set == null) {
set = createSet();
data.addDataSet(set);
}
data.addEntry(new Entry( v, set.getEntryCount()), 0);
// let the chart know it's data has changed
mChart.notifyDataSetChanged();
// redraw the chart
mChart.invalidate();
}
}
private void removeDataSet() {
LineData data = mChart.getData();
if(data != null) {
data.removeDataSet(data.getDataSetByIndex(data.getDataSetCount() - 1));
mChart.notifyDataSetChanged();
mChart.invalidate();
}
}
private void addEmptyData() {
// create 30 x-vals
String[] xVals = new String[30];
for (int i = 0; i < 30; i++)
xVals[i] = "" + i;
// create a chartdata object that contains only the x-axis labels (no entries or datasets)
LineData data = new LineData(xVals);
mChart.setData(data);
mChart.invalidate();
}
@Override
public void onValueSelected(Entry e, int dataSetIndex) {
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected() {
}
private LineDataSet createSet() {
LineDataSet set = new LineDataSet(null, "DataSet 1");
set.setLineWidth(2.5f);
// set.setCircleSize(4.5f);
set.setColor(Color.rgb(240, 99, 99));
// set.setCircleColor(Color.rgb(240, 99, 99));
set.setHighLightColor(Color.rgb(190, 190, 190));
return set;
}
}