2009-08-21 3 views
2

私が現在取り組んでいるアプリケーションでは、複数の画像に対してImageSwitcherのようなものを作成しました(ページングを有効にしたiPhoneのUIScrollViewを想像してください)。AndroidでImageViews間のページングを最適化しますか?

最初に私はImageViewsをハードコードし、作成/インフレーションにそれらの描画可能なリソースをロードしましたが、いくつかの微調整(そして私が改善であると思ったもの)の後、私は必要なビューを3に減らしました。そのうちの2はImageViews現在のページを表示し、現在のページと新しいページとの間でアニメーション化する。この変更に伴い

は、私は(私はHVGAディスプレイ用のサイズのPNGファイルを、使用しています)、ページをスライドする前に、私の2 ImageViewsに新しいイメージを動的にロードするための setImageResource/ setImageDrawableを使用し始めました。

私の失望は、ページをすばやくすばやくスライドさせるときの遅れを感じる程度に、パフォーマンスが悪化しました。 TraceViewのクイックルックでは、アプリケーションを使用している間に、次の重い方法の5倍以上の合計時間の17.4%が、私の動的描画可能リソースの設定によって呼び出されたBitmapFactory.nativeDecodeAssetから消費されたことが明らかになりました。

私はこれを回避する方法を考えており、可能な限り最良の方法でやりたいので、どんな提案も歓迎します。

+0

ImageSwitcherを再発明したようです。 ImageSwitcherはそれだけです:現在の画像と次の画像を表示するために使用される2つのImageViews。同じように聞こえるかもしれないものとは異なり、最初は見えたように、2つの画像の間で前後に切り替えるために使用されるだけではありません。私はしばしば画像の全体をアニメーション化する(そして他のスイッチャーを使ってタイトルを出し入れする)ようなことに使う。私はこれがあなたのパフォーマンス上の問題を解決することは知らないが、少なくともそれはいくつかの事柄を除外することができます。 – lilbyrdie

+0

提案していただきありがとうございます。 ImageSwitcherはいくつかの理由から再開発しなければなりませんでした。最初は複数のImageViewを含むので、現在のビューとヘルパービューに縮小しました。別のTextViewコンポーネントを制御したいからです。 ImageViewsから簡単にアクセスできます - 私は階層を平坦化し、自分が望むものだけを行うカスタムスイッチャービューを使用すると思っていました。 最後に、AllocationTrackerとTraceViewを再生した後、問題はカスタムViewGroupにあるとは思わない。 –

答えて

1

どのような形式で画像がありますか?

AndroidはネイティブでRGB565画像で動作します。そのため、画像をその形式に変換することができれば、デコード処理がはるかに高速になります。

+0

こんにちは、私は画像をPNG形式で取得していると言いましたが、これらのファイルのバッファがRGB 565(16ビットのハイカラーですか?)であるかどうかはわかりません。 .rgb565に変換されたイメージからビットマップを直接読み込もうとしましたが、AndroidのBitmapFactoryがそれと動作しないようです。 とにかく、アイデアをありがとう。 –

関連する問題