2010-08-18 41 views
9

Tôi có một ImageView trên cảnh của tôi mà tôi muốn thiết lập nguồn động dựa trên đầu vào của người dùng.thiết lập nguồn của ImageView động android

Giả sử tôi có 4 hình ảnh trong thư mục có thể vẽ của mình: aaa.png, bbb.png, ccc.png và ddd.png.

Khi tải ứng dụng của tôi, tôi thiết lập các hình ảnh để: aaa.png

myImageView.setImageResource(R.drawable.aaa); 

bây giờ tôi có một EditText nơi người dùng có thể gõ vào bbb và tôi muốn thay đổi nguồn hình ảnh là bbb.png hoặc người dùng nhập ccc, thay đổi nguồn thành ccc.png, v.v.

làm cách nào tôi có thể đặt tham số động trong setImageResource()? Tôi đã thử chơi xung quanh với đối tượng Drawable để không có kết quả ...

Trả lời

2

Nếu bạn muốn cho phép nhập văn bản mở, bạn sẽ phải sử dụng raw assets để tìm nạp chúng theo tên chuỗi (xem phần bên trên trang đó) hoặc sử dụng phép thuật Java reflection để truy xuất trường R Tên. Ngoài ra, bạn có thể giữ một HashMap chuỗi để R.drawable giá trị số nguyên và tìm nó lên, nhưng sau đó bạn sẽ phải duy trì băm đó.

+0

Tôi nghĩ rằng hashmap là những gì tôi sẽ làm. Câu hỏi về điều đó mặc dù, nếu tài sản được thêm vào, làm các giá trị số nguyên cho sự thay đổi tài sản hiện có (tăng)? Hay họ vẫn như cũ? – Kyle

+0

Tài nguyên, ý của bạn là gì? R.ids được biên dịch lại tự động thành các hằng số và thời gian xây dựng và bạn chắc chắn không nên cố gắng truy cập chúng bằng một số cứng. Chỉ cần sử dụng các hằng số từ tệp R.id và bạn sẽ ổn. –

0

Nếu bạn chỉ muốn nó hiển thị hình ảnh mà bạn đã nạp trong bản vẽ của mình, bạn có thể sử dụng Spinner trong đó id cho mục được đặt làm tài nguyên cho số Drawable. Điều đó sẽ dễ dàng hơn đối với bạn và dễ dàng hơn cho người dùng.

0

Nếu bạn muốn sử dụng phản xạ có một cái nhìn vào mã bên dưới:

R.drawable ourRID = new R.drawable(); 
         Field photoNameField = ourRID.getClass().getField("aaa"); 
myImageView.setImageResource(photoNameField.getInt(ourRID)); 

Hy vọng nó giúp.

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