2016-04-12 5 views
0

Я бы создал анимированный WatchFace для Android Wear. У меня 20 изображений, чтобы добавить (или полностью изменить) каждые X мс на задний план.Android Wear: анимация в WatchFace

Теперь: я следил за this tutorial, но анимация не запускается. Я вижу только один из двадцати растровых изображений на моем фоне:

if (isInAmbientMode()) { 
     canvas.drawBitmap(mBackgroundAmbient, SRC, DEST, null); 
} else { 
     canvas.drawBitmap(mBackground, SRC, DEST, null); 
     for (int i = 0; i < LoopBMP.length; i++) { 
      canvas.save(); 

      Bitmap cloud = LoopBMP[i]; 
      canvas.drawBitmap(cloud,centerX, centerY,null); 
      canvas.restore(); 
     } 
} 

Любое предложение?

ответ

0

Вы неправильно понимаете, как делает свой рисунок CanvasWatchFaceService.Engine. Я предполагаю, что фрагмент кода, который вы разместили, находится в вашем методе onDraw; этот метод называется один раз для каждого кадра вашей анимации.

Это означает, что вам нужно переместить анимацию «loop» за пределы метода onDraw. Существует несколько способов сделать это, но я поместил один ниже, основываясь на вашем коде.

private int i; 

@Override 
public void onDraw(Canvas canvas, Rect bounds) { 
    super.onDraw(canvas, bounds); 

    // probably other code here 

    if (isInAmbientMode()) { 
     canvas.drawBitmap(mBackgroundAmbient, SRC, DEST, null); 
    } else { 
     canvas.drawBitmap(mBackground, SRC, DEST, null); 
     if (i < LoopBMP.length) { 
      canvas.save(); 
      Bitmap cloud = LoopBMP[i]; 
      canvas.drawBitmap(cloud,centerX, centerY,null); 
      canvas.restore(); 
      i++; 
      // probably want an X-ms delay here to time the animation 
      invalidate(); 
     } else { 
      i = 0; 
     } 
    } 

    // probably other code here 
} 

Обратите внимание, что это фрагмент, который я только что собрал, чтобы продемонстрировать, о чем я говорю; он ни в коем случае не готов к запуску. В частности, вам понадобится задержка между кадрами вашей анимации; вы можете реализовать это с помощью Handler, как тот, который использовался для второй руки в этом примере: http://developer.android.com/samples/WatchFace/Wearable/src/com.example.android.wearable.watchface/AnalogWatchFaceService.html#l117

+0

Да, код находится в onDraw(). Но я знаю, что я использую больше кода/присваиваний в onDraw для ношения, возможно, потребляет больше батареи. – garsim

 Смежные вопросы

  • Нет связанных вопросов^_^