Android - png ресурс, преобразованный в ColorDrawable на Android < 4.0

Согласно документации здесь, ресурс png должен быть преобразован в BitmapDrawable, Однако я наблюдаю странное поведение, когда png-файл, содержащий только черные пиксели, приводит к сбою из-за ClassCastException (завернут в InvocationTargetException) если я попытаюсь сделать следующее в конструкторе Custom View:

...
  tempDrawable = typedArr.getDrawable (R.styleable.CustomView_src); // Источник указывает на файл png
  Log.i("TestPNGToResource", "Каноническое имя класса" + tempDrawable.getClass(). GetCanonicalName());
  tempBitmap = ((BitmapDrawable) tempDrawable).getBitmap();
  ...

Я вижу следующее вошедшее на Android 2.2 и 2.3

09-24 13: 21: 37.575: I / TestPNGToResource (532): каноническое имя класса android.graphics.drawable.ColorDrawable

Почему ресурс не конвертируется в BitmapDrawable?

2 ответа

Решение

Это оптимизация, выполненная aapt. Он способен распознавать изображения, сделанные из одного цвета, и превращать их, в общем, в один цвет вместо растрового изображения. Это более экономно, улучшает время загрузки и т. Д.

Я предполагаю, что это не произойдет для 9-патчей изображений, верно? также, при использовании файла изображения, будет ли при извлечении файла apk файл изображения внутри него?

в любом случае, я не уверен, поможет ли это, но вы пытались проверить это значение:

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

затем, если это любой из типов цвета, вы можете создать свой собственный рисунок с этим цветом. проблема в том, как получить размер, если это то, что вы получаете.

однако, если в указанном вами особом случае вы получаете ссылочный тип, вы, вероятно, можете заставить его быть BitmapDrawable, просто создав растровое изображение с помощью BitmapFactory.decodeResource ().

Другие вопросы по тегам