编辑:
为了清楚地说明我在寻找什么,这正是我想要的。
当用户按住按钮(手指仍然在屏幕上)时,我希望它显示一种颜色(例如默认的Android半透明波纹效果),然后,取决于用户是否完成了点击,(如果他们举起他们的手指在按钮上时,Android会将其注册为点击,如果他们将手指移动到按钮的边界之外,然后举起手指,Android将不会将其注册为点击)我希望它显示不同颜色。
我正在寻找将按钮执行此操作的xml代码。
按住时,显示默认的Android涟漪效果(简单),如果用户完成咔嗒声,则显示绿色涟漪效果以确认。如果用户没有完成点击,则按下按钮的用户的涟漪应该淡出。
到目前为止,这里或其他问题的xml解决方案都没有这样做。所以我可能不得不在onTouchListener中手动执行此操作。
=============================================== =======================
我正在尝试为我的按钮创建一个可绘制的涟漪效果状态列表,我无法弄清楚如何使用它,以便当按下按钮时,波纹是一种颜色,然后如果用户通过松开按钮完成按钮按下,波纹是另一种颜色。
现在,按下按钮和释放按钮时,我的波纹颜色相同。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="200" android:exitFadeDuration="200">
<item android:state_pressed="false">
<shape android:shape="oval">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="@color/md_teal_500" />
</shape>
</item>
</selector>
有没有办法使用状态列表drawable xml来执行此操作,还是我必须使用触摸侦听器手动执行此操作?
答案 0 :(得分:3)
在drawable文件夹中创建以下xml文件。 buttonnorml.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="2dp" />
<solid
android:width="2px"
android:color="@color/green" />
</shape>
buttonselected.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="2dp" />
<solid
android:width="5px"
android:color="@color/red" />
</shape>
buttonclickeffect.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/buttonselected" android:state_pressed="true" /><!-- pressed -->
<item android:drawable="@drawable/buttonnorml" /> <!-- default -->
</selector>
将其用作按钮的背景:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/buttonclickeffect"
android:text="sample" />
答案 1 :(得分:0)
您可以使用以下代码在代码中实现相同的目标:
int[] attrs = new int[]{R.attr.selectableItemBackground};
TypedArray typedArray = getActivity().obtainStyledAttributes(attrs);
int backgroundResource = typedArray.getResourceId(0, 0);
myView.setBackgroundResource(backgroundResource);
如果你想在视图中自定义涟漪效果,你需要在drawable目录中创建一个新的XML文件。
以下是一些例子:
示例1 :无界波纹
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ffff0000" />
示例2:带有蒙版和背景颜色的波纹
<ripple android:color="#7777777"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/mask"
android:drawable="#ffff00" />
<item android:drawable="@android:color/white"/>
</ripple>
示例3:在可绘制资源的顶部产生波纹
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ff0000ff">
<item android:drawable="@drawable/my_drawable" />
</ripple>
用法:要将您的ripple xml文件附加到任何视图,请将其设置为背景,如下所示:假设您的ripple文件名为my_ripple.xml。
<View
android:id="@+id/myViewId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/my_ripple" />