2012-05-30 58 views
3

我試圖創建一個動態的壁紙,總是以當前主屏幕頁面爲中心,而不會丟失擴展背景。 我現在正在做的是繪製我的自定義背景位圖,然後在其上繪製一些文字。動態壁紙和擴展背景

這是我的並條機的方法:

 final SurfaceHolder holder = getSurfaceHolder(); 
     Canvas canvas = null; 
     try { 
      canvas = holder.lockCanvas(); 
      if (canvas != null) { 

       if(mBackgroundBitmap != null) { 
        canvas.drawBitmap(mBackgroundBitmap, 0, 0, null); 
       } else { 
        canvas.drawColor(Color.BLACK); 
       } 
       drawText(canvas); 
      } 
     } 
     finally { 
      if (canvas != null) holder.unlockCanvasAndPost(canvas); 
     } 

它的工作,但obviousely當我改變主屏幕上的網頁我有一個固定的背景圖像,而不是一個不同的「部分」就像當我用大壁紙。

我試過還設置鎖定畫布前的壁紙,但它並不像預期方式工作:

if(mBackgroundBitmap != null) {     
       try { 
        setWallpaper(mBackgroundBitmap); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
final SurfaceHolder holder = getSurfaceHolder(); 
    Canvas canvas = null; 
    try { 
     canvas = holder.lockCanvas(); 
     if (canvas != null) { 
      drawText(canvas); 
     } 
    } 
    finally { 
     if (canvas != null) holder.unlockCanvasAndPost(canvas); 
    } 

我能做些什麼,以十個分量的大背景「移動」改變主屏幕頁面時,但在當前頁面添加一些居中的動畫?

回答

3

我已經發現如何解決它!

void drawFrame() { 
     final SurfaceHolder holder = getSurfaceHolder(); 

     Canvas canvas = null; 
     try { 
      canvas = holder.lockCanvas(); 
      if (canvas != null) { 
       canvas.save(); 
       canvas.translate((float) mxOffset, 0f); 

       if(mBackgroundBitmap != null) { 
        canvas.drawBitmap(mBackgroundBitmap, 0, 0, null); 
       } 

       canvas.restore(); 
      } 
     } 
     finally { 
      if (canvas != null) holder.unlockCanvasAndPost(canvas); 
     } 
    } 

mBackgroundBitmap是我想繪製爲Wallpaper的位圖,它的寬度是屏幕寬度的兩倍。

的mxOffsets採取在overrided onOffsetsChanged:

@Override 
    public void onOffsetsChanged(float xOffset, float yOffset, 
      float xOffsetStep, float yOffsetStep, int xPixelOffset, 
      int yPixelOffset) { 
     super.onOffsetsChanged(mxOffset, yOffset, xOffsetStep, yOffsetStep, 
       xPixelOffset, yPixelOffset); 

     mxOffset = xPixelOffset; 
     drawFrame(); 
    } 
+0

嗨。其實我正在做同樣的事情,但我希望動畫出現在所有主屏幕頁面中。如何實現這一點。你能提出任何建議嗎? –

+0

@anuja只需將您的mxOffset添加到動畫中,而不僅僅是背景 – Santacrab

+0

嗨santacrab我已經完成了你在我的代碼中所說的內容,它在GO LAUNCHER主屏幕上工作正常,但是當我切換到我的原生Android主屏幕時, LAUNCHER主屏幕我的動態壁紙停止視差滾動。請幫我擺脫這個問題 – himanshu