2

私は現在、Androidで小さなアプリケーションを作成しています。私の願いは、画面上の異なるボタンをクリックしたときにアニメーションを変更する 2 つの ImageView を用意することです。

最初にサンプル xml: (ドローアブルは 250x350y の .png ファイルです)

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/main_idle_kf1" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf2" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf3" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf2" android:duration="500" />
</animation-list>

私のコードの例

ImageView _imgView1; //declared in oncreate = ((ImageView) findViewById... etc)
AnimationDrawable _aniDrawable1;

再開時:

_imgView1.setBackgroundResource(R.drawable.anim_main_idle);
_aniDrawable1 = (AnimationDrawable) _imgView1.getBackground();
_aniDrawable1.start();

これまでのところ、これは機能しており、問題はありません。小さなスプライトはジグです。ただし、一度に2つのimageViewに対してこれを行っており、それぞれのXMLにさらに/異なる「フレーム」を追加しようとしています。ただし、メモリ不足のために VM がクラッシュする前に、多くのフレームを追加する必要はありません。

XMLで言及されている各ドローアブルからbmpを作成し、「setBackgroundResource」を呼び出すと、これをVMメモリにバインドしているように思えます。

私の質問: メモリの負荷を軽減する方法はありますか? .setBackgroundResource が XML からデータを保存する方法を変更できますか? 16MB の VM を壊すには、私の xml にあるような 7 ~ 8 枚の異なる写真で十分です。ボタンをクリックすると変化するアニメーションのいくつかのフレームを並べて実行したいだけですが、AnimationDrawableがVMメモリを大量に消費する場合、それはほとんど不可能に思えます。

ヒント?アイデア?代替案?

4

2 に答える 2

0

この記事を参照してください -大きな画像の読み込み

特に「縮小バージョンをメモリにロードする」セクションを見てください。

于 2013-05-06T20:54:37.353 に答える
0

画像リソースを Android に保持してみてください。リソースをデフォルト/drawable-nodpi として想定している可能性があります。/drawable-mdpi

于 2016-02-13T11:43:34.723 に答える