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 ().