私は現在、AndroidのLiveWallpaperでテストを行っています。次のようなコードを使用して、キャンバスに何かを描画しています。
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = new Canvas();
c = holder.lockCanvas(); // c becomes null
c.save();
c.drawBitmap(currentBitmap);
c.restore();
holder.unlockCanvasAndPost(c);
この部分は通常の状況では正常に機能しています。ただし、このサービスに対応する設定で設定が変更されるたびにこのコードを実行するリスナーがあります。設定アクティビティからこのコードを実行するたびにNullPointer
、c.save()
メソッドを取得しているようです。
壁紙がフォアグラウンドにない場合にのみ、holder.lockCanvas()のようです。フォアグラウンドにないときにこのサーフェスに描画することは不可能ですか?