2
我有一個運行良好的動態壁紙。我想添加一個設置活動,所以我做了所有必需的步驟,並且設置按鈕顯示出來,當我去到動態壁紙選擇器。但是,當我點擊設置按鈕時,出現以下異常。IllegalArgumentException當切換到動態壁紙設置活動
11-23 16:12:53.158: E/AndroidRuntime(5141): FATAL EXCEPTION: main
11-23 16:12:53.158: E/AndroidRuntime(5141): java.lang.IllegalArgumentException
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.view.Surface.nativeUnlockCanvasAndPost(Native Method)
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.view.Surface.unlockCanvasAndPost(Surface.java:457)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine.draw(HackerWallpaperService.java:48)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine.access$0(HackerWallpaperService.java:36)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.gulshansingh.hackerlivewallpaper.HackerWallpaperService$HackerWallpaperEngine$1.run(HackerWallpaperService.java:31)
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.os.Handler.handleCallback(Handler.java:725)
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.os.Handler.dispatchMessage(Handler.java:92)
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.os.Looper.loop(Looper.java:137)
11-23 16:12:53.158: E/AndroidRuntime(5141): at android.app.ActivityThread.main(ActivityThread.java:5039)
11-23 16:12:53.158: E/AndroidRuntime(5141): at java.lang.reflect.Method.invokeNative(Native Method)
11-23 16:12:53.158: E/AndroidRuntime(5141): at java.lang.reflect.Method.invoke(Method.java:511)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-23 16:12:53.158: E/AndroidRuntime(5141): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-23 16:12:53.158: E/AndroidRuntime(5141): at dalvik.system.NativeStart.main(Native Method)
這是這是造成已現在工作正常,直到異常的代碼(導致異常的行已被指示的):
/** Draws all of the bit sequences on the screen */
private void draw() {
SurfaceHolder holder = getSurfaceHolder();
Canvas c = holder.lockCanvas();
if (c != null) {
try {
c.drawARGB(255, 0, 0, 0);
for (int i = 0; i < sequences.size(); i++) {
sequences.get(i).draw(c);
}
} finally {
holder.unlockCanvasAndPost(c); // line 48
}
}
// Remove the runnable, and only schedule the next run if visible
handler.removeCallbacks(drawRunnable);
if (visible) {
handler.post(drawRunnable);
} else {
stop();
}
}
的sequences.get(i).draw()
方法如下
synchronized public void draw(Canvas canvas) {
paint.setAlpha(0);
float prevY = y;
for (int i = 0; i < bits.size(); i++) {
canvas.drawText(bits.get(i), x, y, paint);
y += TEXT_SIZE;
paint.setAlpha(paint.getAlpha() + INCREMENT);
}
y = prevY;
}
在我看來這是唯一的相關代碼,但如果你想看到更多我可以在這裏發佈(請在downvoting之前問)。此外,整個代碼可在Github here上獲得。
非常感謝!這個答案到目前爲止幫助我很大! – ezpresso