私のAndroidアプリケーションでは、asynctaskを使用して、achartengineを使用してリアルタイムチャートをプロットしています。開始と停止の2つのボタンがあります。スタートボタンを押したときにチャートの読み込みを開始し、停止ボタンを押したときにビューをクリアしたい。スタートボタンをもう一度押すと、チャートは再びスタートからスタートするはずです。これが私のコードです:
mstart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0)
{
if(algo_done)
{
layout_eeg1.addView(view_eeg1);
layout_eeg2.addView(view_eeg2);
}
if (view_eeg1== null)
{
view_eeg1= ChartFactory.getLineChartView(BluetoothConnect.this, eeg1, renderer_eeg1);
layout_eeg1.addView(view_eeg1);
}
else
{
view_eeg1.repaint();
}
if (view_eeg2== null)
{
view_eeg2= ChartFactory.getLineChartView(BluetoothConnect.this, eeg2, renderer_eeg2);
layout_eeg2.addView(view_eeg2);
}
else
{
view_eeg2.repaint();
}
if(fhr_alg!=null)
fhr_alg = null;
fhr_alg = new AddStringTask();
algo_done = false;
Thread tt = new Thread()
{
public void run()
{
try{
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
fhr_alg.execute();
}
}
};tt.start();
// w1.loadUrl("javascript:callJS()");
mstart.setEnabled(false);
}
});
mstop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//curr_instance.onDestroy();
if(fhr_alg!=null)
{
fhr_alg.cancel(true);
algo_done = true;
// flag = false;
w2.stopLoading();
w2.clearAnimation();
w2.removeAllViews();
layout_eeg1.removeAllViews();
layout_eeg2.removeAllViews();
}
if (!mstart.isEnabled())
{
mstart.setEnabled(true);
}
SaveData(data, id);
}
});
class AddStringTask extends android.os.AsyncTask<Void, Integer, Integer> {
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
algo_done=true;
//Toast.makeText(Html.this, "Done Algo !", Toast.LENGTH_SHORT).show();
}
@SuppressLint("UseValueOf")
@Override
protected Integer doInBackground(Void... unused) {
try {
for (int r = 0; r <= 5000; r++) {
if (!algo_done && !isCancelled()) {
publishProgress((int) r);
SystemClock.sleep(450);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (0);
}
@Override
protected void onProgressUpdate(Integer ... value) {
final int fhr=value[0];
w2.loadUrl("javascript:count(\""+data[fhr]+"\")");
series2.add(fhr,data[fhr]);
Log.e(Integer.toString(fhr), Integer.toString(data[fhr]));
double max2 = series2.getMaxX();
if(max2>900)
{
renderer_eeg2.setXAxisMax(max2);
renderer_eeg2.setXAxisMin(max2-900);
}
else
{
renderer_eeg2.setXAxisMax(900);
renderer_eeg2.setXAxisMin(0);
}
view_eeg2.repaint();
series1.add(fhr*2,data[fhr]);
double max1 = series1.getMaxX();
switch (k) {
case 0:
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(0);
view_eeg1.repaint();
return;
}
case 1:
{
if(max1>300)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-300);
}
else
{
renderer_eeg1.setXAxisMax(300);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
case 2:
{
if(max1>900)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-900);
}
else
{
renderer_eeg1.setXAxisMax(900);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
case 3:
{
if(max1>1800)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-1800);
}
else
{
renderer_eeg1.setXAxisMax(1800);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
case 4:
{
if(max1>3600)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-3600);
}
else
{
renderer_eeg1.setXAxisMax(3600);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
case 5:
{
if(max1>14400)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-14400);
}
else
{
renderer_eeg1.setXAxisMax(14400);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
case 6:
{
if(max1>86400)
{
renderer_eeg1.setXAxisMax(max1);
renderer_eeg1.setXAxisMin(max1-86400);
}
else
{
renderer_eeg1.setXAxisMax(86400);
renderer_eeg1.setXAxisMin(0);
}
view_eeg1.repaint();
return;
}
}
}
}
問題は、スタートボタンをもう一度押すと、チャートがロードされますが、再起動しないことです。最後の位置から始まります。もう一度0から始めて欲しいです。