У меня есть следующее определение стиля и селектора android, примененное к ListView
, однако я не вижу эффекта градиента серого, применяемого при нажатии на него. При щелчке сразу отображается синий градиент.Выбираемые чертежи
Как автор этого примера написал:
Мы хотим применить это к нашему селектору списка. Вместо того, чтобы всегда показывать тот же градиент, мы хотим, чтобы градиент изменил свой начальный цвет от до светло-голубого при каждом нажатии элемента списка. Поскольку у нас теперь есть два разных селектора списков - один для состояния по умолчанию для нажатого состояния - нам нужно держать их в отдельных файлах.
Может кто-нибудь объяснить, как это должно отображаться правильно? Или я чего-то не хватает?
Более общий, что именно я должен ожидать увидеть на экране? Что-то вроде плавного перехода от градиента серого к синему градиенту в элементе списка?
Обновление: вот как автор «видит» его, но когда я нажимаю на элемент, он выглядит только как на правой стороне изображения. Могу ли я предположить, что автор хочет, чтобы все элементы в списке были серыми по умолчанию? Или это состояние не относится к элементам просмотра списка?
list_item_default.xml -> СЕРЫЙ GRADIENT
<?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 -> СИНИЙ GRADIENT
<?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>
К сожалению, это не помогло. Я не совсем уверен, что я должен увидеть на экране, когда я нажимаю элемент списка. В настоящее время все элементы по умолчанию черные, когда я нажимаю на один из них, он становится синим градиентом. Что я должен ожидать увидеть? – ashur
Я стараюсь, и 4.11 может работать хорошо. Я получаю эффект градиента. Теперь я тестирую его на 2.3.7.4.0. Ваш код может работать хорошо. –
Ну, для меня, я не вижу серого эффекта: P, я не уверен, что правильно понял селекторов тогда, когда я должен увидеть серый градиент и когда синий? Когда я нажимаю элемент в списке, он становится синим, поэтому, когда он должен быть серым? По умолчанию ни один из элементов в списке не выбран, и все темные, как на изображении, которое я дал. – ashur