2015-03-11 2 views
1

Возможно ли в Android дать LevelListDrawable пустой футляр? «Пустое» похоже на «Нет изображения». Например, посмотрите на LevelListDrawable здесь ниже:LevelListDrawable с пустым футляром

<?xml version="1.0" encoding="utf-8"?> 
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >   
    <item 
     android:drawable="@drawable/face_1" 
     android:maxLevel="1" /> 
    <item 
     android:drawable="@drawable/face_2" 
     android:maxLevel="2" /> 
    <item 
     android:drawable="@drawable/face_3" 
     android:maxLevel="3" /> 
    <item 
     android:drawable="@drawable/face_4" 
     android:maxLevel="4" /> 
    <item 
     android:drawable="@drawable/face_5" 
     android:maxLevel="5" /> 
    <item 
     android:drawable="@drawable/face_6" 
     android:maxLevel="6" /> 
</level-list> 

Это Dice с его 6 граней. Я тоже хочу иметь пустое лицо. Случай NULL, или что-то в этом роде.

<?xml version="1.0" encoding="utf-8"?> 
    <level-list xmlns:android="http://schemas.android.com/apk/res/android" >   
     <item 
      android:drawable="" 
      android:maxLevel="0" /> 
     <item 
      android:drawable="@drawable/face_1" 
      android:maxLevel="1" /> 
     <item 
      android:drawable="@drawable/face_2" 
      android:maxLevel="2" /> 
     <item 
      android:drawable="@drawable/face_3" 
      android:maxLevel="3" /> 
     <item 
      android:drawable="@drawable/face_4" 
      android:maxLevel="4" /> 
     <item 
      android:drawable="@drawable/face_5" 
      android:maxLevel="5" /> 
     <item 
      android:drawable="@drawable/face_6" 
      android:maxLevel="6" /> 
    </level-list> 

В настоящее время я смоделировать такое поведение, как это:

ImageView image = new ImageView(context); 
image.setImageDrawable(getResources().getDrawable(R.drawable.dice)); 
image.setImageLevel(3); 
if(somethingHappened){ 
    image.setImageDrawable(null); 
} 

Но после того, что я должен назвать image.setImageDrawable(getResources().getDrawable(R.drawable.dice)); другой раз вместо того, чтобы изменить уровень изображения. Спасибо.

+1

Вы должны использовать для нулевого случая, чтобы он мог работать, возможно, добавить прозрачную растягиваемую инстанку d оставляя допустимое поле пустым. –

+0

Да, наверное, я сделаю так ... – superpuccio

ответ

1

minLevel является 0 по умолчанию, так что если вы хотите, чтобы исключить face_1 отображалось level=0 добавить его в явном виде

<item 
    android:drawable="@drawable/face_1" 
    android:minLevel="1" 
    android:maxLevel="1" /> 

Проблема заключается в том, что теперь face_2 будет показано (потому что это соответствие [0, 2]), но если вы добавьте min и max для всех лиц с одинаковыми значениями каждый, они будут играть хорошо.

См. android.graphics.drawable.LevelListDrawable.LevelListState#indexOfLevel для получения дополнительной информации.

В качестве альтернативы я увидел магическое значение где-то:

<item 
    android:drawable="@null" 
    android:maxLevel="0" /> 

Но это, скорее всего, бросить NPE или исключение из LevelListDrawable#inflate:

< элемент тега> требует «рисуем» атрибут или дочерний тег определяя растягиваемый

Смежные вопросы