Как добавить эффект пульсации в настройки в Android?

Я работаю над добавлением эффекта пульсации, когда предпочтение затрагивается (выбрано). Я настроил свои предпочтения, расширив ListPreference . Я попытался установить эффект пульсации программным путем с помощью RippleDrawable но я не вижу анимацию.

Вот мой индивидуальный класс предпочтений

 public class CustomListPreference extends ListPreference { public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); } public CustomListPreference(Context context) { super(context); } @Override protected void onBindView(View view) { super.onBindView(view); setCustomStyle(view); } private void setCustomStyle(View view) { TextView titleView = (TextView) view.findViewById(android.R.id.title); titleView.setTypeface(InitActivity.TYPEFACE_REGULAR); TextView summary = (TextView) view.findViewById(android.R.id.summary); summary.setTypeface(InitActivity.TYPEFACE_REGULAR); //Setting the drawable here, but it doesn't work. RippleDrawable drawable = (RippleDrawable) getContext().getResources().getDrawable(R.drawable.my_ripple_background); view.setBackGround(drawable); } } 

Моя настройка предпочтений

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- opens a subscreen of settings --> <com.abc.app.CustomListPreference android:defaultValue="1" android:entries="@array/sampleEntries" android:entryValues="@array/SampleEntryValues" android:key="some_preference" android:title="@string/some_preferences" /> <com.abc.app.CustomCheckboxPreference android... /> </PreferenceScreen> 

Моя рябь xml

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/light_black_overlay"> <!--#22000000--> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/background_light" /> </shape> </item> </ripple> 

Я устанавливаю анимацию для правильного представления? Любые идеи приветствуются. Благодарю.

Это минимальный полный пример добавления специального эффекта ряби в класс, который расширяет ListPreference . Я только что сделал и протестировал это с помощью API 21 (5.0).

SettingsActivity (Запуск активности)

 public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); } } 

pref_general.xml

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:defaultValue="true" android:key="example_checkbox" android:summary="a checkbox" android:title="Checkbox test" /> <!-- replace with com.abc.app.CustomListPreference in your case--> <com.timcastelijns.rippletest.CustomListPreference android:defaultValue="1" android:entries="@array/sampleEntries" android:entryValues="@array/SampleEntryValues" android:key="some_preference" android:title="test" /> </PreferenceScreen> 

arrays.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sampleEntries"> <item>1</item> <item>2</item> <item>3</item> </string-array> <string-array name="SampleEntryValues"> <item>4</item> <item>5</item> <item>6</item> </string-array> </resources> 

CustomListPreference

 public class CustomListPreference extends ListPreference { private Context ctx; public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); ctx = context; } public CustomListPreference(Context context) { super(context); ctx = context; } @Override protected void onBindView(View view) { super.onBindView(view); setCustomStyle(view); } private void setCustomStyle(View view) { RippleDrawable drawable = (RippleDrawable) ctx.getDrawable(R.drawable.my_ripple_background); view.setBackground(drawable); } } 

my_ripple_background.xml

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/holo_blue_light"> <item android:id="@android:id/mask"> <color android:color="@android:color/white" /> </item> </ripple> 

При нажатии он показывает эффект синего пульсации, как указано в xml:

Введите описание изображения здесь


Я построил этот пример на основе вашего кода и кода из примера SettingsActivity в образцах SDK для Android.


Редактировать:
По прошествии некоторого времени в чате и различных попыток мы пришли к выводу, что проблема вызвана телефоном OP (Samsung S5) или его настройками. Когда OP попытался использовать код в эмуляторе, все работало правильно.

Для справки – вот как он выглядел в телефоне OPs:

Введите описание изображения здесь