簡體   English   中英

Android:SurfaceView忽略postInvalidate()?

[英]Android: SurfaceView ignoring postInvalidate()?

這是我第一次使用它,所以我不確定它是否是我的代碼中的錯誤,或者我正在嘗試做一些不允許的事情。

目前,我有一個DrawThread(),它在run方法中執行此操作。

try {
  c = m_surfaceHolder.lockCanvas(null);
  synchronized (m_surfaceHolder) {
    m_view.onDraw(c);
  }
}
finally {
  if (c != null) {
    m_surfaceHolder.unlockCanvasAndPost(c);
  }
}

在這個繪圖線程(非UI線程)中,我的onDraw()方法將畫布傳遞給另一個名為drawScoreboard()的方法。 我希望這種方法在顯示記分板的每一行之間有一個短暫的延遲,所以我添加了一個postInvalidateDelay(x),希望它再次觸發onDraw()。

/**
 * A helper function which draws the scoreboard.
 */
private void drawScoreboard(Canvas canvas) {
  long delay = m_drawScoreboard.draw(canvas, m_paint);

  if (delay > 0) {
    this.postInvalidateDelayed(delay);
  }
}

代碼正確執行並且調用了postInvalidateDelayed(),但我很困惑為什么沒有調用onDraw()。 我需要做任何標記或初始化才能使其工作嗎?

任何建議或理論都是受歡迎的。 謝謝!

你血淋淋的傳說卡蘭!

這指出了我正確的方式。 我發現一些帖子提到它必須在surfaceCreated()方法而不是構造函數中完成,它使postInvalidate()工作。

但是,啟用它將禁用我的自定義DrawThread完成的任何繪圖。 好的是,應該很容易找到一個很好的時間點來撥打電話。

再次感謝, View.setWillNotDraw()完成了這個伎倆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM