0

我正在使用 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;
}
}
4

1 回答 1

0

添加新条目时需要更新 xVals。这将解决您的问题。

把你的 ArrayList 放到全局 ArrayList xVals = new ArrayList();

当你添加一个新的条目时,更新列表(例如) xVals.add("val"+i);

于 2015-01-05T20:09:56.757 回答