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