загрузка картинки из архива сразу в Drawable
вопрос возник как всегда на ровном месте. понадобилось прочесть из zip-архива, что входит в apk (т.е. в проекте лежит в папке assets), файл. не распаковывать весь архив или файлы на диск/флешку (вдруг там места нет), а именно прочитать файл в поток и сразу закинуть его в Drawable для использования как фона кнопки, обоев и пр. (впрочем, там будут и файлы других форматов)
вот пример того, как я рылся в архивах до этого печального момента: PHP код:
заранее благодарен. |
Ответ: загрузка картинки из архива сразу в Drawable
с текстовым файлом проще, конечно.
а вот что с картинками и музыкой делать прямо не знаю. ((( как bytearray превратить в картинку типа png (с alpha) или jpg? PHP код:
|
Ответ: загрузка картинки из архива сразу в Drawable
Есть замечательный класс BitmapFactory
В нем есть методы для получения Bitmap и из массива, и из файла, и даже из InputStream. Из Bitmap легким движением руки получаем Drawable: Drawable drawable = new BitmapDrawable(context.getResources(), bitmap); Кстати, в случае InputStream не обязательно даже вспоминать про BitmapFactory, есть конструктор BitmapDrawable, принимающий в себя InputStream. Читаешь файлы из zip-архива на первый взгляд правильно. Только вторую твою функцию можно будет уменьшить, учитывая, что не обязательно считывать картинку в массив байтов, а достаточно использовать InputStream. А вообще, по поводу использования zip-архивов в качестве ассетов - я бы посоветовал перестать наркоманить и больше так не делать. Ты не забыл, что apk-файл - это тоже zip-архив? |
Ответ: загрузка картинки из архива сразу в Drawable
Цитата:
но это не основная причина. просто хотел редактор и интерпретатор собрать - подсовываешь программе один архив, а внутри и контент и интерфейс... а вариант с InputStream и BitmapDrawable я уже пробовал, он не пошел. видимо, там был мой косяк. вернусь к нему и буду искать дыры. спасибо! |
Ответ: загрузка картинки из архива сразу в Drawable
...
|
Ответ: загрузка картинки из архива сразу в Drawable
Передай свой ZipInputStream в функцию BitmapFactory.decodeStream(InputStream is). Если ты в данный момент находишься на нужной тебе ZipEntry (ты переключаешься между ними с помощью getNextEntry()), то этот ZipInputStream выдаст только твою картинку, а не весь файл.
|
Ответ: загрузка картинки из архива сразу в Drawable
я это уже пытался делать. только сейчас понял, почему не работало. с контекстами напутано было.
короче, вот РАБОЧИЙ ВАРИАНТ: PHP код:
|
Ответ: загрузка картинки из архива сразу в Drawable
назначение класса - доставать ресурсы напрямую из архива, который лежит в папке assets приложения, либо где-то на устройстве или флешке. ресурсы ( пока только графика и строки в UTF-8 ) помещаются сразу в контейнеры. собственно, как это сделать, я и хотел спросить, когда создавал тему.
PHP код:
|
Ответ: загрузка картинки из архива сразу в Drawable
По странному стечению обстоятельств, именно сегодня столкнулся с одной интересной технической тонкостью Андроида. Я работаю над SDK, которая автоматически встраивается в готовые Android-игры. Сегодня обнаружилось, что некоторые игры начинают падать в начале работы после перепаковки моей утилитой. Путем долгих расследований я обнаружил, что причина заключается в том, что звуки игры, хранящиеся в формате .ogg, в итоговом apk-файле оказываются в сжатом виде, в то время как в оригинальном архиве они лежали без компрессии. Поначалу я был удивлен, как это может каким-то образом влиять на что-либо. А затем нашел одну полезную статью, в которой рассказывается о том, что для многих типов ассетов любая компрессия нежелательна или даже смертельна. Самое интересное, что до версии андроида 2.3 вообще нельзя было хранить ассеты размером более 1 МБ в сжатом виде, иначе приложение падало. А у тебя вообще архив на архиве и архивом погоняет. Учти это в своем редакторе, а я не стал бы трогать это даже двенадцатиметровой палкой.
|
Ответ: загрузка картинки из архива сразу в Drawable
ок, выкидываем из ассетов архивы. там всё будет валяться в несжатом виде. архивы будут читаться только с устройства, если я когда-нибудь соберу редактор. спасибо за помощь и уместные страшилки!
*пошел выкидывать 12-метровую палку* |
Часовой пояс GMT +4, время: 06:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot