AChartEngine의 막대 차트의 데이터를 업데이트하는 코드를 작성했습니다. 디버그 모드에서 코드를 실행하면 새 포인트가 배열에 추가됩니다. 그러나 새 막대가 화면에 표시되지 않습니다. AsyncTask를 사용하여 업데이트합니다.Android 업데이트 막대 차트
AsyncTask를 : 그것은 활동
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("inCreate","inCreate");
// Get ALL the data!!!
Bundle extras = getIntent().getExtras();
if (extras != null) {
this._chartTitle = extras.getString("chartTitle");
this._xTitle = extras.getString("xTitle");
// and other variables are filled here
}
setData();
Log.v("method","call Asynctask");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new ChartTask2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);
else
new ChartTask2().execute();
}
에게의
private class ChartTask2 extends AsyncTask<Void, String, Void>{
// Generates dummy data in a non-ui thread
@Override
protected Void doInBackground(Void... params) {
try{
for(int i = 0; i < 5; i++) {
Log.v("Asyntask", "doInBackground");
String [] values = new String[2];
values[0] = Double.toString(6+ i);
values[1] = Double.toString(6 +i);
publishProgress(values);
Thread.sleep(1000);
Log.v("i", Integer.toString(6+i));
}
}catch(Exception e){ }
return null;
}
// Plotting generated data in the graph
@Override
protected void onProgressUpdate(String... values) {
_series.add("Bar" + Double.parseDouble(values[0]),Double.parseDouble(values[1]));
_mChartView.repaint();
Log.v("Asyntask", "repaint onProgressUpdate");
}
}
OneCreate 때문에
설정 모든 데이터 :
public void setData() {
Log.v("method","setData");
// Add the bar data
dataset = new XYMultipleSeriesDataset();
for(int bars = 0; bars < (_yCoords.length); bars++){
_series = new CategorySeries(_barNames[bars]);
for (int point = 0; point < (_yCoords[bars].length); point++){
_series.add("Bar " + _yCoords[bars][point], _yCoords[bars][point]);
}
dataset.addSeries(_series.toXYSeries());
}
// Holds a collection of XYSeriesRenderer and customizes the graph
mRenderer = new XYMultipleSeriesRenderer();
// Customize Bars
for(int i = 0; i < _yCoords.length; i++){
_renderer = new XYSeriesRenderer();
_renderer.setColor(_colors[i]);
_renderer.setDisplayChartValues(_displayValues[i]);
_renderer.setChartValuesSpacing(_valuesSpacing[i]);
mRenderer.addSeriesRenderer(_renderer);
}
// Set optional settings
mRenderer.setChartTitle(_chartTitle);
//and more data is set here
setContentView(drawData());
}
나는 데이터 그리는 방법 :
public View drawData() {
Log.v("method","tekenData");
// Set background
View view = View.inflate(this, _layout, null);
// Getting a reference to view group linear layout chart_container
LinearLayout chartContainer = (LinearLayout) view.findViewById(_wrapper);
// Getting LineChartView to add to the custom layout
_mChartView = ChartFactory.getBarChartView(this, dataset, mRenderer, Type.DEFAULT);
// Adding the line chart to the custom layout
chartContainer.addView(_mChartView);
return view;
}
을
이상한 점은 동일한 구성이 선 차트로 잘 작동한다는 것입니다. 그러나이 막 대형 차트에 의하면 다시 칠하지 않습니다. 당신이 당신의 onProgressUpdate
에 _series
변수에 값을 추가 한 후 dataset
를 업데이트하지 않는 것처럼 도움 :
그래,하지만 데이터 세트에 추가하면 새로운 세리에트가 생성됩니다. 데이터 세트에서 serie를 가져 와서 데이터 세트에서 제거하고 세리에를 업데이트 한 다음 다시 추가하면 작동하지 않습니다. – Lutske