ビデオのトランジションやズームなどのテキスト アニメーションを作成しようとしています。
スムーズなトランジションを得ることができず、効果がぎくしゃくしています。すると、Android ではサブピクセル レンダリングができないことがわかりました。どのような代替案が考えられますか? この問題を OpenGL で解決できますか?
わかりました...質問にさらに追加したいと思います....実際には、表面ビューでネイティブプレーヤーによって再生されるビデオの上にテキストアニメーションを実装しようとしています。Android Canvas API を使用してテキスト アニメーションを実現し、テキストのスケーリング、変換などを行いました。これは機能しますが、出力はそれほどスムーズではありません。パフォーマンスの問題ではないことを確認しました。フレームを 30 fps 以上で更新しても、ジャーキネスが見られます。
次に、Android ビューを使用してこれらのアニメーションを取得しようとしましたが、ハードウェア アクセラレーションがオンになっていると、アニメーションがバターのように滑らかであることがわかりました。しかし、Android View システムのアニメーションでさえ、ハードウェア アクセラレーションがオフになっていると、高品質のスケール アニメーションを提供できません。各フレームをビットマップにダンプし、PC で各フレームをチェックしたため、これもパフォーマンスの問題ではありません。
したがって、ハードウェア アクセラレーションがオフになっているときに Canvas で描画するために使用される SKIA グラフィックス ライブラリは、サブピクセル レンダリングなどに対応していないようです。たとえば、スロー スケール アニメーション (約 6 秒で約 0.15 のスケール) を実行している場合、スケールの更新は約 3 フレームで 1 ピクセルずつ発生します。しかし、ハードウェア アクセラレーション ビューで同じアニメーションを実行すると、各フレームがピクセルの一部を更新し、スケール アニメーションは非常に滑らかに見えます。
プレビュー中にビュー アニメーションを確実に使用できます。しかし、これらのアニメーション バッファーを取得し、ビデオと共にエンコードする必要があります。ハードウェアアクセラレーションをオンにして、これらのバッファを取得する際の入力が役立ちます。描画キャッシュを試してみましたが、ハードウェアではなくソフトウェア レンダリング パイプラインを使用して描画されているようです。