Animação no início da atividade salta

Estou trabalhando na animação de Visualizações personalizadas para meu aplicativo Android. Eu consegui isso viaAnimações de propriedades e chamandoinvalidate() na vista noonAnimationUpdate() retorno de chamada, conformehttps://developer.android.com/guide/topics/graphics/prop-animation.html:

Dependendo da propriedade ou objeto que você está animando, pode ser necessário chamar o método invalidate () em uma Visualização para forçar a tela a se redesenhar com os valores animados atualizados. Você faz isso no retorno de chamada onAnimationUpdate ().

Meu problema é que, quando essas animações são executadas no início de umrecém-lançado Atividade, eles pulam os quadros no início, fazendo com que eles pulem muito visivelmente. Eu tentei ambos:

Iniciando a animação imediatamente a partir doonCreate() métodoIniciando a animação noOnGlobalLayout() retorno de chamada usando oViewTreeObserver da visualização raiz da atividade.

Eu fiz o último, pois pensei que talvez a animação tivesse sido chamada antes da finalização do layout, mas o resultado é o mesmo.

Com os logs, determinei que oonAnimationUpdate() o retorno de chamada é chamado de forma consistente em toda a animação (ou seja, a cada 10-20 ms, aproximadamente, do início ao fim).onAnimationUpdate() simplesmente chamainvalidate(), que deve forçar a exibição a redesenhar-se, idealmente imediatamente (mas a documentação afirma apenas que isso acontece "em algum momento no futuro"). Esse parece ser exatamente o problema:onDraw() é chamado apenas uma ou duas vezes no início, antes de não ser chamado por cerca de 250 ms. Depois disso, ele continua sendo chamado a cada 10-20 ms, como deveria ter o tempo todo. Mas esse intervalo de tempo causa um atraso muito perceptível na animação.

Para esclarecer, esse problema ocorre apenas no início da atividade. Se eu simplesmente definir um atraso de 300 ms antes de iniciar a animação, ela será executada sem problemas durante todo o processo. Mas não gosto dessa solução, pois é hacky. Parece que o problema é queonDraw() não é chamado imediatamente apósinvalidate() próximo ao início da atividade. Mas não consigo entender por que isso é, o que está bloqueandoonDraw()ou como corrigi-lo.

Encontrei apenas este segmento StackOverFlow:A animação no início da atividade pula quadros onde o cartaz tem oidêntico problema. O código básico está lá e os vídeos esclarecem o problema. Também posso postar meu código, mas acho que o fato de o problema aparecer no aplicativo de teste mais básico mostra que há algo mais acontecendo.

questionAnswers(2)

yourAnswerToTheQuestion