0

这是我在 Activity 上的代码,用于使画布无效,它不会使其无效。意味着 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 回答