0

これは、無効になっていないキャンバスを無効にするアクティビティの私のコードです。onDraw() が一度も呼び出されていないことを意味します。

   public GraphView  view;
    @Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);

          view  = GraphView(this,null);
            runplotTimer();
  } 


      public void  runplotTimer()
    {
    Timer t = new Timer();
    //Set the schedule function and rate
    t.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            InvalidateTimer();
        }      
    },1000,40); 
}

  public void InvalidateTimer()
{
     this.runOnUiThread(new Runnable() {
            @Override
            public void run()
            {
                 //Log.d(ALARM_SERVICE, "Timer of 40 miliseconds");
                  view.InvalidateGraph();
            } 
        });
 }

View クラスでは、Activity から呼び出されるメソッドです。その他の OnDraw 宣言は必須と同じです。

   public void InvalidateGraph()
  {
     m_bCalledPlotRealTimeGraph = true;
         invalidate(chanX_count1, 0, chanX_count1+7, graphheight);


  }   

何か助けてください?

4

2 に答える 2

0

Viewスレッドのに変更を加えようとしていますが、機能しTimerません。invalidateメイン (UI) スレッドで呼び出す必要があります。

((Activity) view.getContext()).runOnUiThread(new Runnable() {
    @Override
    public void run() {
        invalidate(chanX_count1, 0, chanX_count1+7, graphheight);
    }
});
于 2013-08-23T15:09:02.413 に答える
0

タイマーを開始する必要があります

 Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        InvalidateTimer();
    }      
},1000,40); 
t.start()

Timer の代わりに Handler を使用します。

class UpdateHandler implements Runnable {

    @Override
    public void run(){

       handler.sendEmptyMessageAtTime(0, 1000);
       handler.postDelayed(this, 1000);     

    }

}

private Handler handler = new Handler(Looper.getMainLooper())  {

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                    //Call your draw method                 
                }

            }

    };

onCreate と onResule 内の書き込み

  if( mupdateTask == null )
    mupdateTask = new UpdateHandler();
    handler.removeCallbacks(mupdateTask);

を使用してハンドラーを呼び出します

handler.postDelayed(mupdateTask, 100);
于 2013-08-23T15:09:42.610 に答える