최근 라이브 배경 화면에 화면 회전에 관한 질문을 게시했습니다. 나는이 문제가 된 이유를 테스트하기 위해, 나는 아래의 간단한 프로그램 작성 :RE : 라이브 월페이퍼 화면 회전
package com.live.waller;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
public class LiveWallpaperService extends WallpaperService {
/** Called when the activity is first created. */
@Override
public Engine onCreateEngine() {
// TODO Auto-generated method stub
return new LiveWallerEngine();
}
class LiveWallerEngine extends Engine {
SurfaceHolder holder;
private Handler mHandle;
LiveWallerEngine() {
mHandle = new Handler();
holder = getSurfaceHolder();
}
private Runnable runner = new Runnable() {
public void run() {
// TODO Auto-generated method stub
drawFrame();
}
};
public void drawFrame() {
while(isVisible()) {
if(!holder.getSurface().isValid())
continue;
Canvas c = null;
try{
c = holder.lockCanvas();
drawSurface(c);
} finally {
if(c != null) holder.unlockCanvasAndPost(c);
}
}
}
public void drawSurface(Canvas c) {
c.save();
c.drawColor(Color.argb(255, 100, 200, 124));
c.restore();
}
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
// TODO Auto-generated method stub
super.onCreate(surfaceHolder);
setTouchEventsEnabled(true);
mHandle.post(runner);
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep, int xPixelOffset,
int yPixelOffset) {
// TODO Auto-generated method stub
super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep,
xPixelOffset, yPixelOffset);
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
super.onSurfaceChanged(holder, format, width, height);
mHandle.post(runner);
}
@Override
public void onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
super.onTouchEvent(event);
}
@Override
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
super.onVisibilityChanged(visible);
}
@Override
public void setTouchEventsEnabled(boolean enabled) {
// TODO Auto-generated method stub
super.setTouchEventsEnabled(enabled);
}
}
}
을 그리고 내 바탕 화면을 회전 할 때, 나는 빈 화면을 볼하고있다. 누구든지 내 코드에 어떤 문제가 있는지 알고 있습니까? 내가 배경 화면을 실행하면
, 나는 로그 캣에서 이러한 오류를 얻을 :
ActivityManager: force stopping package com.live.waller uid=10046
PackageManager: Not granting permission android.permission.BIND_WALLPAPER to package com.live.waller (protectionLevel=3 flags=0xbe46)
dalvikvm: GC_CONCURRENT freed 609K, 43% free 4604K/8071K, external 904K/1222K, paused 6ms+7ms
dalvikvm: GC_EXPLICIT freed 320K, 44% free 4561K/8071K, external 904K/1222K, paused 138ms
dalvikvm: GC_EXTERNAL_ALLOC freed 197K, 51% free 2955K/6023K, external 1736K/1742K, paused 78ms
어떤 이상한 것은 내가 로그 캣에 힘 중지 메시지를 얻을 수 있다는 것입니다하지만 내 배경 화면을 설정 에뮬레이터.
while (isVisible()) 및 holder.getSurface(). isValid())는 어떻게 평가됩니까? 보이는거야? 표면은 유효합니까? – Davos555
예, 배경 화면을 실행할 때 화면이 녹색입니다. 화면을 회전시킬 때만 검은 색으로 변합니다. – Denizen
화면을 회전 할 때이 두 가지 조건이 true로 평가됩니까? – Davos555