Потрібно вирішити наступне завдання: є listview в кожному пункті є кружечок - маркер, який повинен бути в кожному ітемов різного кольору, канали RGB записані в трьох масивах. Спочатку пробував обійтися без картинки: просто створював канву, малював, конвертував в bitmap, a її в свою черги в drawable, але ця спроба не принесла жодного результату, ось що пишуть логи:
далі пробував так: закинув png з малюнком кола, перекладав її в масив пікселів, і в циклі зраджував кожен піксель, нічого не вийшло, та ж помилка. нижче фрагмент коду
06-04 16: 05: 10.978: E / BitmapFactory (1233): Unable to decode stream: java.io.FileNotFoundException: /android.graphics.drawable.BitmapDrawable@527e700c. open failed: ENOENT (No such file or directory)
Причина цього поведінки проста, і пояснення йому міститься, як не дивно, в документації:
the following views are then tried in order:
- A view that implements Checkable (e.g. CheckBox). The expected bind value is a boolean.
- TextView. The expected bind value is a string and setViewText (TextView, String) is invoked.
- ImageView. The expected bind value is a resource id or a string and setViewImage (ImageView, int) or setViewImage (ImageView, String) is invoked.
Зверніть увагу на виділену частину. З неї випливає, що для ImageView SimpleAdapter чекає або int. або String. інтерпретуючи їх як resource id або file path відповідно. Ви ж ставите в map екземпляр Drawable.
Правильний вихід з цієї ситуації - не використовувати SimpleAdapter. а наслідувати свій адаптер безпосередньо від BaseAdapter. імплементуючи потрібні методи.