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) 

지금까지 잘 작동 한 예외를 일으키는 코드 (예외를 일으키는 라인 표시 한)

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; 
} 
다음과 같이

/** 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() 방법은

내 생각에 이것은 유일한 관련 코드이지만 더 많이보고 싶다면 여기에 게시 할 수 있습니다 (downvoting 전에 물어보십시오). 또한 전체 코드는 Github here에서 사용할 수 있습니다.

답변

6

지난 몇 주 동안이 문제를 해결하는 데 10 시간 이상을 소비 했음에 틀림 없지만 마침내 알아 냈습니다.

SettingsActivity가 만들어지면 배경 무늬가 더 이상 보이지 않지만 여전히 표면에 그리려합니다. 아래쪽의 if 문을 변경하여 전체 그리기 기능을 감싸서 표시되지 않을 때 표면에 그리지 않습니다. 그건 내 문제를 해결.

이렇게하면 누군가가 내가 한 것처럼 많은 시간을 낭비하지 않아도됩니다.

+0

정말 고마워요! 이 대답은 정말 지금까지 나를 도왔습니다! – ezpresso

관련 문제