2011-10-19 12 views
4

私は少し問題がありますが、うまくいけば誰かがチャイムして助けてくれるでしょう。Androidカスタムズームアニメの性能が悪い

私はカスタムビューのアニメーションを作成しました。(ターゲットビューを特定の時間の間にハンドラに変更する実行可能ファイルをポストしていますが)ビューの幅と高さを変更すると、 0,0)を中心にズームしたいので、それに従ってマージンを変更してビューを移動します。問題は、ズーム反復のステップが小さすぎる(つまり0.01f以下)場合、ビューのマージンを1つの方向だけで変更する必要があります。方向の1つで、アニメーションがきらきらとしているように見えることがあります。私は正確な理由は分かりませんが、私は次のことを試しました:

1)ズーム時にlayoutParamsを設定するときに、親ビューのonLayout()をオーバーライドしてマージンを変更しようとしました。これは、setLayoutParams()が実際にはあまり合理的ではないように見える移動時に、setLayoutParams()への2回目の呼び出しを避けるために行いました。

2)新しい余白をチェックして、XとYの両方の方向で新しい余白と古い余白の間に差がある場合にのみ設定されるようにします。

3)ビューを移動するためにレイアウトパラメータを変更するのではなく、view.offsetLeftAndRight()view.offsetTopAndBottom()を使用してみましたが、やはり役に立たなかったです。

どのような提案がありますか?

+0

XMLにアニメーションを書き込むのではなく、ランナブルをハンドラにポストすることを選択する特別な理由はありますか? – roboguy12

答えて

1

私はあなたが正しくビットマップキャッシュをビューから取得し、手動で描画する必要があります。この場合、ビットマップはグリッチなしで描画されます(ビットマップフィルタリングがオンの場合)。

あなたは、次の手順でそれを行うことができます。

  1. GETビューキャッシュ - View.getDrawingCache経由または
  2. View.draw関数を呼び出すことにより、非表示ビュー
  3. を、現在のシステム時刻を取得 - SystemClock.elapsedRealtime(おかげでアニメーションの進捗状況を計算できます)
  4. 起動して画面を無効にし、アニメーションが終了したかどうかを確認します。
  5. show view

おそらくAndroid Animationクラスで行うことができますが、かなり制限されているので、私は使用しません。

関連する問題