Android - png资源转换为Android上的ColorDrawable< 4

时间:2013-09-24 17:17:38

标签: android android-drawable android-inflate bitmapdrawable colordrawable

根据文档here,应将png资源转换为BitmapDrawable。但是我正在观察一个奇怪的行为,其中png文件中只有黑色像素导致崩溃,因为ClassCastException(包裹在InvocationTargetException中)如果我尝试在自定义视图的构造函数中执行以下操作:

  ...
  tempDrawable = typedArr.getDrawable(R.styleable.CustomView_src); // Source points to a png file
  Log.i("TestPNGToResource", "Canonical Class Name " + tempDrawable.getClass().getCanonicalName());
  tempBitmap = ((BitmapDrawable) tempDrawable).getBitmap();
  ...

我看到以下登录android 2.2和2.3

09-24 13:21:37.575: I/TestPNGToResource(532): Canonical Class Name android.graphics.drawable.ColorDrawable

为什么资源没有转换为BitmapDrawable?

2 个答案:

答案 0 :(得分:3)

这是aapt执行的优化。它能够识别由单一颜色构成的图像,并将它们转换为单色而不是位图。这样更节省空间,缩短了加载时间等。

答案 1 :(得分:0)

我认为对于9补丁图像不会发生这种情况,对吧?另外,在使用图像文件时,会解压缩apk文件还在其中显示图像文件吗?

无论如何,我不确定这是否有帮助,但您是否尝试检查此值:

TypedValue value = a.peekValue(R.styleable.CustomView_src);

然后,如果它是任何颜色类型,您可以使用此颜色创建自己的drawable。问题是如何获得大小,如果这是你得到的。

但是,如果在您显示的特殊情况下,您获得了引用类型,您可以通过使用BitmapFactory.decodeResource()创建位图来强制它为BitmapDrawable。