Ich arbeite gerade an einem Live-Hintergrundbild, das sehr intensiv ist und die Bildschirmdrehung nicht gut beherrscht.Live Wallpaper Screen Rotation
In der Tat ist das Hintergrundbild zerstört und zeigt einen leeren Bildschirm ohne Aufruf von SurfaceChanged!
Hier ist, was ich in der onSurfaceChanged Methode haben:
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
super.onSurfaceChanged(holder, format, width, height);
mRatio = (float) width/height;
if (mRatio > 1) {
orientation = 0;
}
if (mRatio < 1) {
orientation = 1;
}
setRunning(true);
Log.i(TAG, "Screen Rotation...");
mHandle.post(r);
}
Ich bin positiv diese Methode aufgerufen nicht, weil es keine Log-Nachricht ist.
Warum passiert das und welche Techniken gibt es für die Bildschirmdrehung? Könnte es sein, dass mein Live-Wallpaper so intensiv ist, dass die Lücke nicht aufgerufen werden kann?
Auch ist onVisibilityChanged nicht so gut genannt, und wenn ich apps auf dem Emulator öffnen, gibt es keine Log-Nachricht:
@Override
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
super.onVisibilityChanged(visible);
if (visible) {
setRunning(true);
Log.i(TAG, "Visible...");
mHandle.postDelayed(r, 2000);
} else {
setRunning(false);
Log.i(TAG, "Invisible...");
mHandle.removeCallbacks(r);
}
}
ist Könnten Sie mehr Code posten? Ich muss wissen, wo all die schwere Arbeit gemacht wird. In meinem Live Wallpaper werden sowohl onSurfaceChanged als auch onVisibilityChanged während Bildschirmdrehungen aufgerufen. Überprüfen Sie außerdem, ob LogCat während der Änderung der Ausrichtung "Timeout wait for wallpaper to offset" anzeigt. – Ole