Показать сообщение отдельно
Старый 15.11.2013, 13:29   #8
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: загрузка картинки из архива сразу в Drawable

назначение класса - доставать ресурсы напрямую из архива, который лежит в папке assets приложения, либо где-то на устройстве или флешке. ресурсы ( пока только графика и строки в UTF-8 ) помещаются сразу в контейнеры. собственно, как это сделать, я и хотел спросить, когда создавал тему.

package ru.turururu.turu;

import java.io.*;
import java.util.zip.*;

import android.content.Context;
import android.graphics.drawable.Drawable;

public class  
Unzip {
    
    
// у меня всегда в ассетс будет только 1 архив с данными, из которого нужно доставать ресурсы
    
public static String zipfilename "data.zip";
    
    public static 
String StreamToString(InputStream is) {
        try {
            return new 
java.util.Scanner(is).useDelimiter("\\A").next();
        } catch (
java.util.NoSuchElementException e) {
            return 
"";
        }
    }
    
    
/* чтение строки из архива в Assets
     * пример вызова из Activity:
     * textview1.setText(Unzip.zipAssetsDrawable("text1.txt", getApplicationContext()));*/
    
public static String zipAssString(String filenameContext context) {
        
String s "";
        try {
            
ZipInputStream zipinputstream = new ZipInputStream(context.getAssets().open(zipfilename));
            
ZipEntry zipentry zipinputstream.getNextEntry();
            while (
zipentry != null) {
                if (
filename.equalsIgnoreCase(zipentry.getName())) {
                    
StreamToString(zipinputstream);
                    
zipinputstream.closeEntry();
                }
                
zipentry zipinputstream.getNextEntry();
            }
            
zipinputstream.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
        return 
s;
    }

    
/* чтение строки из архива на диске
     * пример вызова из Activity:
     * textview1.setText(Unzip.zipFileString("/mnt/sdcard/Android/data/TestProject/archive.zip", "text1.txt"));*/
    
public static String zipFileString(String zipfilenameString filename) {
        
String s "";
        try {
            
FileInputStream is = new FileInputStream(zipfilename);
            
ZipInputStream zipinputstream = new ZipInputStream(is);
            
ZipEntry zipentry zipinputstream.getNextEntry();
            while (
zipentry != null) {
                if (
filename.equalsIgnoreCase(zipentry.getName())) {
                    
StreamToString(zipinputstream);
                    
zipinputstream.closeEntry();
                }
                
zipentry zipinputstream.getNextEntry();
            }
            
zipinputstream.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
        return 
s;
    }
    
   
/* Чтение картинки из архива в Assets. Пример вызова из Activity:
    * imageview1.setImageDrawable(Unzip.zipAssetsDrawable("image1.jpg", getApplicationContext()));
    * в папке Assets открывается архив assets.zip и из него извлекается
    * картинка filename сразу в Drawable */
    
public static Drawable zipAssDrawable(String filenameContext context) {
        
Drawable d null;
        try {
            
InputStream is context.getAssets().open(zipfilename);
            
ZipInputStream zipinputstream = new ZipInputStream(is);
            
ZipEntry zipentry zipinputstream.getNextEntry();
            while (
zipentry != null) { 
                
String entryName zipentry.getName();
                if (
entryName.equalsIgnoreCase(filename)) {
                    
Drawable.createFromStream(zipinputstreamentryName);
                    
zipinputstream.closeEntry();
                }
                
zipentry zipinputstream.getNextEntry();
            }
            
zipinputstream.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
        return 
d;
    }

    
/* чтение картинки из архива на диске
     * в zipfilename - путь и имя архива,
     * в filename - имя искомого файла
     * пример вызова из Assets:
     * imageview1.setImageDrawable(Unzip.zipFileDrawable("/mnt/sdcard/Android/data/TestProject/archive.zip", "image1.jpg"); */
    
public static Drawable zipFileDrawable(String zipfilenameString filename) {
        
Drawable d null;
        try {
            
FileInputStream is = new FileInputStream(zipfilename);
            
ZipInputStream zipinputstream = new ZipInputStream(is);
            
ZipEntry zipentry zipinputstream.getNextEntry();
            while (
zipentry != null) { 
                
String entryName zipentry.getName();
                if (
entryName.equalsIgnoreCase(filename)) {
                    
Drawable.createFromStream(zipinputstreamentryName);
                    
zipinputstream.closeEntry();
                }
                
zipentry zipinputstream.getNextEntry();
            }
            
zipinputstream.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
        return 
d;
    }
    

__________________
to be or not to be - it's not a question!
2b or not 2b = ff

Последний раз редактировалось barsunduk, 15.11.2013 в 18:05.
(Offline)
 
Ответить с цитированием