Ориентация экрана в живых обоях

Я создал живые обои. В портретном режиме он работает нормально, но когда я переключаю телефон в альбомный режим, вид не отображается должным образом. Теперь я хочу сделать следующее: "Исправить ориентацию экрана в портретном режиме". Как я могу сделать это для живых обоев? Я пытался повернуть растровое изображение и холст, но это выглядит не так хорошо. Есть ли учебник по вращению холста и растрового изображения? Пожалуйста, предложите и, пожалуйста, советуйте мне по моей проблеме. Заранее спасибо.

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 координат, исходя из разницы реальной высоты и желаемой высоты.

Я надеюсь, что это поможет!

Другие вопросы по тегам