0
我目前正在使用Android中的LiveWallpaper進行測試。我畫使用代碼在畫布上的東西看起來是這樣的:SurfaceHolder.lockCanvas返回null如果表面不在前臺
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
。
看來,只有當壁紙不在前臺時,holder.lockCanvas()。當它不在前景中時不可能繪製到這個表面上嗎?
是的,我可以刪除監聽器,它會很好,問題是我希望它在畫布不可見時重繪,以便當畫布變得可見時,它將根據用戶設置進行更新,而不是的用戶看到它發生了變化,這就是現在發生的情況。 –
在onVisibilityChange之前有沒有被調用的東西? –
當onVisibilityChanged傳入'true'來解決此問題時,您可以調用onSharedPreferencesChanged(null)。 – Josh