これを使用するのは初めてなので、コードのバグなのか、許可されていないことをしようとしているのかわからない.
現在、run メソッドでこれを行う DrawThread() があります。
try {
c = m_surfaceHolder.lockCanvas(null);
synchronized (m_surfaceHolder) {
m_view.onDraw(c);
}
}
finally {
if (c != null) {
m_surfaceHolder.unlockCanvasAndPost(c);
}
}
この描画スレッド (非 UI スレッド) では、onDraw() メソッドがキャンバスを drawScoreboard() という別のメソッドに渡します。このメソッドがスコアボードの各行を表示する間に短い遅延を持たせたかったので、onDraw() が再度トリガーされることを期待して postInvalidateDelay(x) を追加しました。
/**
* 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() IS が呼び出されますが、onDraw() が呼び出されない理由に困惑しています。これを機能させるために必要なフラグや初期化はありますか?
アドバイスや理論は大歓迎です。ありがとう!