2011-02-02 36 views
11

Tôi đang gặp sự cố khi đặt Hình nền ngược của LinearLayout từ thư mục nội dung.Làm thế nào để đặt hình ảnh nền từ thư mục tài sản trong Android?

String filePath="file:///android_asset/images/test.png"; 
    Drawable d = Drawable.createFromPath(filePath); 
    frontTextView.setBackgroundDrawable(d); 

Ai đó có thể giúp tôi.

+0

Có vấn đề gì? Ứng dụng có bị lỗi không? BTW, tại sao bạn sử dụng thư mục tài sản thay vì thư mục 'res/drawable'? –

+0

Nó không hiển thị bất cứ điều gì. Tôi không thể sử dụng res/drawable vì tôi phải tự động thay đổi nền của Linearlayout. – Altaf

+0

Thực sự, có thể bạn cần thư mục tài sản cho mục đích khác nhưng bạn có thể thay đổi nền động chỉ bằng cách sử dụng thư mục 'res/drawable':' setBackgroundResource (R.id.bg1); setBackgroundResource (R.id.bg2) ' –

Trả lời

16

Ok, trong trường hợp bất cứ ai khác tình cờ ở đây, vấn đề này rất nơi bạn muốn thiết lập nền của một cái nhìn từ một hình ảnh mà là ở tài sản:

Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 

và sau đó đặt nó vào một số Xem mà chỉ hỗ trợ Drawables làm nền.

+0

Tôi thích nó mà bạn đã làm cho nó một lớp lót duy nhất :) –

8

Theo như tôi biết, you cannot access assets directly như bạn đang cố gắng. Bạn cần phải sử dụng lớp AssetManager để nhận dữ liệu của mình nếu bạn muốn lưu trữ dưới dạng nội dung. Here's a pretty decent blog post giải thích một chút về tài nguyên và tài sản, mặc dù tài liệu chính thức cũng là một tài nguyên tốt, tất nhiên.

Tôi cũng sẽ thêm vào những thứ như hình nền thường được lưu trữ tốt nhất trong res/drawable và được truy cập bằng cách sử dụng kiểu R.drawable.* (bài đăng trên blog được liên kết ở trên cũng thảo luận về điều này) bất cứ khi nào có thể. Nó không thực sự rõ ràng lý do tại sao bạn cần phải làm điều đó theo cách này từ mẫu mã được cung cấp của bạn, mặc dù, vì vậy tôi cho rằng đó là cuối cùng cuộc gọi của bạn.

2

EDIT: thêm tạo hình ảnh từ InputStream ...

tôi đã có vấn đề tương tự sử dụng ImageButton. Tôi đã tìm ra bằng cách tải bitmap từ các tài sản và sử dụng nó làm hình ảnh cho ImageButton. Có lẽ không phải là một cách tiếp cận tốt, nhưng đang làm việc và giải quyết vấn đề của tôi - không có khả năng để có thư mục con trong thư mục drawable và không được phép ký tự trong tên tập tin.

(Vâng, tôi có thể sử dụng tiền tố thay vì subdir, và đổi tên file để phù hợp với mô hình (chữ thường chỉ và số) và tôi có lẽ sẽ làm điều đó sau này.)

InputStream is = null; 
try { 
    is = this.getResources().getAssets().open("Images/Fruits/Apple.png"); 
} catch (IOException e) { 
    Log.w("EL", e); 
} 

Bitmap image = BitmapFactory.decodeStream(is); 

ImageButton ib2 = (ImageButton) findViewById(R.id.imageButton2); 
ib2.setImageBitmap(image); 
+0

Thật tuyệt, nhưng biến 'image' đến từ đâu? Có lẽ bạn nhận được nó từ 'là' bằng cách nào đó? –

+0

Bạn có thể tạo hình ảnh từ luồng đầu vào ... Ảnh bitmap = BitmapFactory.decodeStream (is); – CoPLaS

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