2013-02-13 2 views
0

У меня есть ImageView определить в XML, как выглядит следующим образом:setImageDrawable не имея эффекта без существующего контента

 <ImageView 
      android:id="@+id/background" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop"/> 

Я пытаюсь установить содержание изображения динамически в коде, основываясь на определенных действиях пользователя (они выберите изображение из их библиотеки). Я установил изображение, используя следующий код:

ImageView bgView = (ImageView)root.findViewById(R.id.background); 
    Drawable d = Drawable.createFromPath(wallpaper); 
    bgView.setImageDrawable(d); 

Вызов этого кода не оказывает немедленного воздействия на экземпляр ImageView. Однако, если я помещаю какой-то образ в определение XML, то вроде:

Он отлично работает. Кто-нибудь знает, что может быть причиной проблемы? Я проверил, что код настройки изображения работает в потоке пользовательского интерфейса и что созданный Drawable действителен. Проблема в том, что это может быть связано с неправильным выполнением макета, чтобы отразить добавленное изображение?

+0

bgView.setImageDrawable (R.drawable.test_image) работает? – Leonidos

+0

Извините, забудьте об этом упомянуть. Вызов setImageDrawable не может ничего сделать, даже если я выложу его из папки/res/drawable, если в XML не существует существующего содержимого. – TaylorP

+0

Я думаю, что в этом случае может понадобиться больше кода. setImageDrawable отлично работает, не требуя установки в XML. Я предполагаю, что есть что-то, что может повлиять на ваши результаты, которые не являются частью кода. – dymmeh

ответ

0

Так я понял, что этот вопрос, после того, как немного больше копания. В случае, когда задано пустое изображение (то есть состояние по умолчанию, когда пользовательские настройки не установлены в пользовательских настройках), мой код делает .setImageDrawable (null) при загрузке представления. Удаление этого, казалось, исправить проблему.

1

Try:

ImageView bgView = (ImageView)root.findViewById(R.id.background); 
Drawable d = Drawable.createFromPath(wallpaper); 
// check d != null 
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
bgView.setImageDrawable(d); 
Смежные вопросы