2012-04-16 97 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