多くの苦労の末、aは自分のSurfaceViewやりたいことを実行しないと判断しました。つまり、一部の UI 要素の上に配置し、他の要素の下に配置するということです。また、すべての UI 要素を に描画するのSurfaceViewは、置き換えようとしていた多層階層よりも実際には大幅に遅いことも発見しました。Viewしたがって、を使用して独自のアニメーションをコーディングしようとしていますonDraw()。
これについて私が考えることができる最も簡単な方法は、おおよそ次のとおりです。
- 今すぐ時間を測る
- アニメーションの状態に関する計算を実行する
- 電話
invalidate() - でアニメーションを描く
onDraw() - 1に戻ります。
nextFrame()ステップ 1 と 2 を実行する my からの関数が既にSurfaceViewあり、draw 関数は実際には単純で、単一のパスです。私はnextFrame()電話をかけることができ、描画が完了し、次のフレームの準備ができていることを知らせるinvalidate()ためにonDraw()電話をかけることができます. nextFrame()残念ながら、これが問題を引き起こしていることは想像できます。
invalidate()を直接呼び出しonDraw()ますか? のように呼び出しスレッドを実装する必要がありSurfaceViewますか?