Android 实时壁纸中的屏幕方向

Android 实时壁纸中的屏幕方向,android,canvas,bitmap,screen-orientation,live-wallpaper,Android,Canvas,Bitmap,Screen Orientation,Live Wallpaper,我已经创建了一个实时壁纸,它在纵向模式下工作正常,但当我将手机置于横向模式时,视图无法正常显示。现在我要做的是“在纵向模式下固定屏幕方向”。我怎样才能为一张现场壁纸做到这一点? 我试着旋转位图和画布,但效果不太好。有关于旋转画布和位图的教程吗?请就我的问题向我提出建议。 提前谢谢。请查看我的代码: public class PonyWallpaper extends AnimationWallpaper { /*some code here*/ class

我已经创建了一个实时壁纸,它在纵向模式下工作正常,但当我将手机置于横向模式时,视图无法正常显示。现在我要做的是“在纵向模式下固定屏幕方向”。我怎样才能为一张现场壁纸做到这一点? 我试着旋转位图和画布,但效果不太好。有关于旋转画布和位图的教程吗?请就我的问题向我提出建议。
提前谢谢。

请查看我的代码:

    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所需宽度:960高 所需:800

从纵向切换到横向时的输出:

方向已更改(352):宽:480高:800所需宽度:960高 所需:800

如您所见,每次方向更改时都会调用android.service.wallper.wallperservice.Engine类的onSurfaceChanged方法

据我所知

this.getDesiredMinimumWidth()

this.getDesiredMinimumHeight()

请勿更改,这是宽度和高度的最大可能值

我的解决办法是:

  • 将宽度、所需宽度、高度和所需高度传递给我的抽屉对象的方法
  • 调用坐标范围为0.0到1.0的drawObject()类方法
  • 将抽屉对象内的值缩放到所需宽度和所需高度描述的逻辑坐标
  • 根据传递的xPixelOffset设置实x坐标的偏移量
OnOffsets已更改

方法

android.service.wallpaper.wallperservice.Engine

  • 根据实际高度和所需高度之差设置一组实际y坐标

我希望这会有帮助

请看一下我的代码:

    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所需宽度:960高 所需:800

从纵向切换到横向时的输出:

方向已更改(352):宽:480高:800所需宽度:960高 所需:800

如您所见,每次方向更改时都会调用android.service.wallper.wallperservice.Engine类的onSurfaceChanged方法

据我所知

this.getDesiredMinimumWidth()

this.getDesiredMinimumHeight()

请勿更改,这是宽度和高度的最大可能值

我的解决办法是:

  • 将宽度、所需宽度、高度和所需高度传递给我的抽屉对象的方法
  • 调用坐标范围为0.0到1.0的drawObject()类方法
  • 将抽屉对象内的值缩放到所需宽度和所需高度描述的逻辑坐标
  • 根据传递的xPixelOffset设置实x坐标的偏移量
OnOffsets已更改

方法

android.service.wallpaper.wallperservice.Engine

  • 根据实际高度和所需高度之差设置一组实际y坐标

我希望这会有帮助

我在更改屏幕方向时也有问题。我的壁纸每分钟只重绘一次,所以当方向改变时,我必须触发重绘。你知道当方向改变时调用哪个事件吗?但回到你的问题:在我的例子中,我只是用画布来画我的东西。我不需要做任何特殊的事情来画风景模式。当手机处于纵向模式画布时。getWidth()是手机的宽度,当手机处于横向模式画布时。getWidth()是手机的高度。因此,我不必把它转过来或类似的东西…我也有一个问题,当改变屏幕方向。我的壁纸每分钟只重绘一次,所以当方向改变时,我必须触发重绘。你知道当方向改变时调用哪个事件吗?但回到你的问题:在我的例子中,我只是用画布来画我的东西。我不需要做任何特殊的事情来画风景模式。当手机处于纵向模式画布时。getWidth()是手机的宽度,当手机处于横向模式画布时。getWidth()是手机的高度。因此,我不必把它转过来或诸如此类的东西…我刚刚在我的新索尼Xperia TX中发现了两张预安装的带有固定纵向的实时壁纸。如果使用其中一张实时壁纸,屏幕也固定在纵向模式。所以,也许,这是一种按选项设置的方式……我刚刚在我的新索尼Xperia TX中发现了两张预安装的带有固定纵向的实时壁纸。如果使用其中一张实时壁纸,屏幕也固定在纵向模式。所以,也许,这是一种通过选项设置的方法。。。