2012-04-16 115 views
1

我创建了一个动态壁纸它在纵向模式下工作正常,但是当我将手机置于横向模式下时,视图不能正常显示。现在我想要做的是“修复屏幕方向在肖像模式“。我怎样才能做到这一点的动态壁纸? 我试图旋转位图和画布,但它看起来不是很好。有没有关于旋转画布和位图的任何教程?请建议并请为我的问题提供建议。 在此先感谢。动态壁纸中的屏幕方向

+0

我在改变屏幕方向时也有问题。我的壁纸每分钟重绘一次,因此当方向改变时我必须触发重绘。你有一个想法,当方向改变时哪个事件被调用? – 2012-05-14 13:24:54

+0

但回到你的问题:就我而言,我只是用画布来绘制我的东西。而且我不需要做任何特殊的事情来绘制横向模式。当手机处于纵向模式时,canvas.getWidth()是手机的宽度,当手机处于横向模式时,canvas.getWidth()是手机的高度。所以我不必把它变成这样或类似的东西...... – 2012-05-14 13:27:34

回答

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) :w:800 h:480所需宽度:960高度 所需数量:800

从纵向切换到风景时,输出:

取向改变(352):W:480个H:800宽度期望:960高度 期望:800

,你可以请参阅android.service.wallpaper.WallpaperService.Engine类的onSurfaceChanged方法,每当方向发生变化时调用。

从我注意到,

this.getDesiredMinimumWidth()

this.getDesiredMinimumHeight()

没有变化并且是宽度和高度的最大可能值。

我的解决办法是:

  • 到宽度,所希望的宽度,高度和希望的高度传递给我的抽屉对象的方法;
  • 可以调用drawObject()方法,坐标范围为0.0到1。0;
  • 将抽屉对象内部的这些值缩放到由所需宽度和期望高度描述的逻辑坐标;
  • 设置由

坐标由xPixelOffset判断通过的实际X构成了偏置onOffsetsChanged方法的

android.service.wallpaper.WallpaperService.Engine

  • 根据实际高度和期望高度的差异来设置实际y坐标的损失。

我希望这会有所帮助!

+0

我刚刚在我的新索尼Xperia TX中发现了两个预装的固定纵向方向的动态壁纸。如果您使用其中一个动态壁纸,屏幕也会以人像模式修复。所以,也许,这是通过选项设置它的某种方式... – 2013-01-31 11:01:31