[英]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.