2011-01-31 39 views
6

Tôi có một ứng dụng Android có chứa một thư viện jar phụ thuộc bên ngoài. Thư viện bên ngoài này chứa một số png-bitmap mà tôi muốn hiển thị trên một số ImageView trong ứng dụng của tôi.Cách tải hình ảnh cho Android ImageView từ classpath?

Nhìn vào bên trong tệp APK của ứng dụng của tôi, tôi có thể tìm thấy hình ảnh trong thư mục phụ ("aq \ img") như mong đợi.

Cách tốt nhất để hiển thị hình ảnh (hiểu rõ đường dẫn lớp) trên ImageView là gì.

Tôi cố gắng này

ImageView imgView01 = (ImageView) findViewById(R.id.imageView1); 
    Drawable d = Drawable.createFromPath("aq/img/sample.png"); 
    imgView01.setImageDrawable(d); 

và điều này

InputStream is = ClassLoader 
      .getSystemResourceAsStream("sample.png"); 
    Bitmap bm = BitmapFactory.decodeStream(is); 
    imgView01.setImageBitmap(bm); 

nhưng nó đã không làm việc (tôi đã không thực sự mong đợi nó sẽ là đơn giản). Hình ảnh vẫn trống.

Cảm ơn bạn đã trợ giúp!

Kính trọng Klaus

Trả lời

4

Hình ảnh PNG không phải là "tài nguyên hệ thống" vì tài nguyên hệ thống trên Android là tệp trong hệ thống tệp thông thường. Hình ảnh bạn muốn nằm trong kho lưu trữ APK. Bạn có thể sử dụng getSystemResourceAsStream để mở một số InputStream để đọc các byte của tệp lưu trữ APK, chứ không phải tệp trong lưu trữ trừ khi bạn đã triển khai logic để tự giải nén tệp.

Đơn giản chỉ cần sử dụng này:

InputStream is = getClass().getClassLoader().getResourceAsStream("aq/img/sample.png"); 

EDIT: Lưu ý rằng trên Android, tên được truyền cho getSystemResourceAsStream được coi là một đường dẫn đến tập tin tương đối so với thư mục gốc (/). Vì APK được lưu trữ trong /data/app, sau đó để mở InputStream để đọc APK, bạn có thể sử dụng ClassLoader.getSystemResourceAsStream("data/app/PACKAGE-1.apk"), trong đó "PACKAGE" là gói ứng dụng của bạn.

Các vấn đề liên quan