2012-05-30 4 views
3

Я пытаюсь создать живые обои с анимацией, всегда центрированной на текущей домашней странице, не теряя расширенный фон. То, что я сейчас делаю, это нарисовать мой собственный растровый рисунок фона, а затем нарисовать на нем текст.Живые обои и расширенный фон

Это мой метод drawframe:

 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); 
    } 

Что я могу сделать его поддерживать большой фон «мобильный» при смене Homescreen страниц, но добавьте некоторую анимацию, сосредоточенную на текущей странице?

ответ

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 является Bitmap я хочу нарисовать в качестве обоев и его ширина двойной ширины экрана.

В mxOffsets берется в перекрытая 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

Hi. На самом деле я делаю то же самое, но хочу, чтобы анимация отображалась на всех страницах главного экрана. Как это достичь. Можете ли вы предложить что-нибудь. –

+0

@anuja просто добавьте ваш mxOffset также к анимации, а не только к фону – Santacrab

+0

привет santacrab Я сделал то, что сказал в своем коде, и он отлично работает на главном экране GO LAUNCHER, но когда я переключаюсь на свой собственный домашний экран Android с GO Начальный экран LAUNCHER мои живые обои останавливают прокрутку параллакса. Пожалуйста, помогите мне избавиться от этой проблемы. – himanshu