3

私は Android アプリを書いていますが、非常に奇妙な状況に遭遇しました。「loading.xml」という名前のアニメーション ローディング グラフィック用に作成したアニメーション リスト xml ファイルがあり、それをコード内の ImageView の背景として設定しています。それは次のようなものです:

public void startLoading() {
   if(!isLoading) {
      loading.setBackgroundResource(R.drawable.loading);
      loading.post(new Runnable() {
         public void run() {
            anim = (AnimationDrawable) loading.getBackground();
            anim.start();
         }
      });

      flMask.setBackgroundResource(R.drawable.mask_loading);
      flMask.setVisibility(View.VISIBLE);
      flMask.bringToFront();

      isLoading = true;
   }
}

これは何の問題もなく素晴らしく機能します。ただし、'loading.xml' の名前を 'anim_loading.xml' に変更すると (通常の命名スキームと一致するようにするため)、強制的に閉じることができます。

java.lang.ClassCastException: android.graphics.drawable.ColorDrawable

行で

anim = (AnimationDrawable)loading.getBackground();

名前を変更した後、強制終了します。「loading.xml」に戻すと、再び正常に動作します。

私は本当にこれに困惑しています。正しい名前で完全に新しいファイルを作成し、さまざまなクリーン/ビルド、Eclipse の終了/再開、AVD の終了/再開、AVD のワイプ、再インストールを試みました。xml ファイルの名前を完全に別のものに変更してみました。同じ名前の他のリソースはありません。これまでのところ、「loading.xml」という名前のファイルを残す以外に何も機能していません。少なくとも機能しますが、面倒です。私は同じタイプの問題を抱えている人を見つけることができませんでした.SOやインターネットと同じくらい広大です.

このファイルの名前を変更できない理由について誰か考えがありますか?

4

2 に答える 2

6

あきらめてしばらく放っておいたところ、この質問の答えに出くわしました!

どうやら、Androidにはある種のバグがあり、実際のファイルに関係なく、res/drawableディレクトリの最初のファイルがColorDrawableとして表示されます。以前、ファイルの名前を変更しようとすると、新しい名前によってディレクトリのリストの一番上に配置され、このバグが発生する可能性がありました。名前を変更しないと、ドローアブルディレクトリの一番上のアイテムがたまたまColorDrawableだったので、その名前を変更してみるまで、この奇妙なバグに気付くことはありませんでした。

問題を解決するために(または、問題を回避するために)、res/drawableディレクトリにa.xmlという名前の空のダミーファイルを作成しました。奇妙に聞こえるかもしれませんが、それはすべてを修正しました!

于 2012-09-05T20:00:38.163 に答える
-1

drawable res/drawable/rocket.xml に保存する必要があります

それは質問を修正します。

スクリーンショット

于 2016-02-03T12:25:55.363 に答える