3

我正在编写一个 Android 应用程序并且遇到了一个非常奇怪的情况。我有一个动画列表 xml 文件,该文件是为名为“loading.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

您应该保存在可绘制 res/drawable/rocket.xml

它会解决这个问题。

截屏

于 2016-02-03T12:25:55.363 回答