Селектор рисунков

У меня есть следующее определение стиля и селектора Android, примененного к ListView, однако я не вижу эффекта серого градиента, применяемого, когда я нажимаю на него. При нажатии сразу отображается синий градиент.

Как написал автор этого примера:

Мы хотим применить это к нашему селектору списка. Вместо того, чтобы всегда отображать один и тот же градиент, мы хотим, чтобы градиент менял свой начальный цвет с серого на светло-голубой всякий раз, когда нажимается элемент списка. Поскольку теперь у нас есть два разных селектора списка — один для состояния по умолчанию и другой для состояния нажатия — нам нужно хранить их в отдельных файлах.

Может кто-нибудь объяснить, как это должно отображаться правильно? Или я что-то упускаю?
В общем, что именно я должен увидеть на экране? Что-то вроде плавного перехода от серого градиента к синему градиенту при нажатии на элемент списка?

Обновление: это то, как автор «видит» это, но когда я нажимаю на элемент, он выглядит только так, как на правой стороне изображения. Могу ли я предположить, что автор хочет, чтобы все элементы в списке были по умолчанию серыми? Или это состояние не применимо к элементам списка?

list_item_default.xml -> СЕРЫЙ ГРАДИЕНТ

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="0"
        android:endColor="#FFFF"
        android:startColor="#AFFF" />
    <stroke
        android:width="1dip"
        android:color="#CCC" />
    <corners android:radius="5px" />
</shape>

list_item_pressed.xml -> СИНИЙ ГРАДИЕНТ

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="0"
        android:endColor="#FFFF"
        android:startColor="#AA66CCFF" />
    <stroke
        android:width="1dip"
        android:color="#CCC" />
    <corners android:radius="5px" />
</shape>

list_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/list_item_default" android:state_pressed="false"/>
    <item android:drawable="@drawable/list_item_pressed" android:state_pressed="true"/>
</selector>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyMoviesTheme" parent="@android:style/Theme.Black">
    <item name="android:listViewStyle">@style/MyMoviesListView</item>
    <item name="android:windowBackground">@drawable/film_bg</item>
  </style>

  <style name="MyMoviesTextAppearance" parent="@android:style/TextAppearance">
    <!--<item name="android:textStyle">bold</item>-->
  </style>

  <style name="MyMoviesListView" parent="@android:Widget.ListView">
    <item name="android:background">@color/list_background</item>
    <item name="android:listSelector">@drawable/list_selector</item>
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:fastScrollEnabled">true</item>
    <item name="android:footerDividersEnabled">false</item>
  </style>

</resources>

person ashur    schedule 12.02.2014    source источник


Ответы (1)


Попробуйте добавить предложение:

    <item 
    android:state_enabled="true" 
    android:drawable="@drawable/list_item_default"/>
    <item
    android:state_enabled="true"  
    android:drawable="@drawable/list_item_pressed" 
    android:state_pressed="true"/>
person Mr.H    schedule 12.02.2014
comment
К сожалению, это не помогло. Я не совсем уверен, что я должен видеть на экране дисплея, когда я нажимаю элемент списка. В настоящее время все элементы по умолчанию черные, когда я нажимаю на один из них, он становится синим градиентом. Что я должен ожидать увидеть? - person ashur; 12.02.2014
comment
Я пробую это, и 4.11 может работать хорошо. Я получаю эффект градиента. Теперь я тестирую его на 2.3.7, 4.0. Ваш код может работать хорошо. - person Mr.H; 13.02.2014
comment
Что касается меня, я не вижу серого эффекта: P, я не уверен, что правильно понимаю селекторы, когда я должен видеть серый градиент, а когда синий? Когда я нажимаю элемент в списке, он становится синим, а когда он должен быть серым? По умолчанию ни один из элементов в списке не выбран, и все они темные, как на изображении, которое я дал. - person ashur; 13.02.2014
comment
У меня есть то, что вы хотите сделать. По умолчанию ни один из элементов в списке, ‹item name=android:background›@color/list_background‹/item›, вы увидите цвет list_background. код не может работать. Вы имеете в виду, что по умолчанию ни один из элементов в списке не имеет темного цвета, но знаете ли вы, какой элемент должен быть серым? Нет! Вы не знаете, поэтому вы можете сделать это следующим образом. Если элемент был проверен, он будет установлен в фоновом режиме с серым цветом. В противном случае он будет темным. Если его щелкнуть, селектор вступит в силу. Надеюсь, вы понимаете мой английский ..... - person Mr.H; 13.02.2014