Android - png 资源在 android < 4.0 上转换为 ColorDrawable



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

 ...  tempDrawable = typedArr.getDrawable(R.styleable.CustomView_src);源指向 png 文件  Log.i("TestPNGToResource", "Canonical Class Name " + tempDrawable.getClass().getCanonicalName());  tempBitmap = ((BitmapDrawable) tempDrawable).getBitmap();  ...

我看到以下内容登录安卓 2.2 和 2.3

09-24 13:21:37.575: I/TestPNGToResource(532): 规范类名 android.graphics.drawable.ColorDrawable

为什么资源未转换为位图可绘制对象?

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

我认为 9 补丁图像不会发生这种情况,对吧? 另外,使用图像文件时,提取 Apk 文件是否仍会显示其中的图像文件?

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

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

然后,如果它是任何颜色类型,则可以使用此颜色创建自己的可绘制对象。 问题是,如果这就是你得到的,如何获得尺寸。

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

最新更新