Ориентация экрана в живых обоях
Я создал живые обои. В портретном режиме он работает нормально, но когда я переключаю телефон в альбомный режим, вид не отображается должным образом. Теперь я хочу сделать следующее: "Исправить ориентацию экрана в портретном режиме". Как я могу сделать это для живых обоев? Я пытался повернуть растровое изображение и холст, но это выглядит не так хорошо. Есть ли учебник по вращению холста и растрового изображения? Пожалуйста, предложите и, пожалуйста, советуйте мне по моей проблеме. Заранее спасибо.
1 ответ
Пожалуйста, посмотрите на мой код:
public class PonyWallpaper extends AnimationWallpaper {
/*some code here*/
class PonyEngine extends AnimationEngine {
/*some code here as well*/
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
Log.v("orientation changed", "w: "+width + " h: " + height + " width desired: " + this.getDesiredMinimumWidth() + " height desired: " + this.getDesiredMinimumHeight());
с AnimationEngine объявлен как
protected abstract class AnimationEngine extends android.service.wallpaper.WallpaperService.Engine
Вывод при переключении на портрет из пейзажа:
изменена ориентация (352): ширина 800 мм желаемая ширина 480 высота желаемая высота 800
Выход при переключении в альбомную ориентацию из портретной:
изменена ориентация (352): ширина: 480 ч: 800 ширина желаема: 960 высота желательна: 800
Как вы можете видеть, метод onSurfaceChanged класса android.service.wallpaper.WallpaperService.Engine вызывается каждый раз, когда изменяется ориентация.
Из того, что я заметил,
this.getDesiredMinimumWidth ()
а также
this.getDesiredMinimumHeight()
не меняются и являются максимально возможными значениями ширины и высоты.
Мое решение было:
- передать ширину, желаемую ширину, высоту и желаемую высоту методу объекта моего ящика;
- вызвать методы drawObject() с координатами в диапазоне от 0,0 до 1,0;
- масштабировать эти значения внутри объекта ящика до логических координат, описываемых желаемой шириной и желаемой высотой;
- установить смещение действительных координат x, судя по xPixelOffset, переданному
onOffsetsChanged
метод
android.service.wallpaper.WallpaperService.Engine
- установить смещение реальных y координат, исходя из разницы реальной высоты и желаемой высоты.
Я надеюсь, что это поможет!