如何在android中的偏好添加涟漪效应?

我正在努力添加涟漪效应,当偏好被触摸(select)。 我已经通过扩展ListPreference定制我的偏好。 我试图通过使用RippleDrawable编程设置涟漪效果,但我没有看到animation。

这是我的自定义喜好类

 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> 

我是否将animation设置为正确的视图? 任何想法都表示赞赏。 谢谢。

Solutions Collecting From Web of "如何在android中的偏好添加涟漪效应?"

这是将一个自定义连锁效果添加到扩展ListPreference的类的最小完整示例。 我只是用API 21(5.0)进行testing。

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中所指定的:

在这里输入图像说明


我基于你的代码构build了这个例子,以及android SDK示例中SettingsActivity示例中的代码。


编辑:
经过一段时间的聊天和尝试各种各样的事情,我们得出结论,这个问题是由OP的手机(三星S5)或其设置造成的。 当OP在模拟器中尝试了代码时,它一切正常。

作为参考 – 这是它在OP电话中的样子:

在这里输入图像说明