按下并用xml释放不同的背景颜色?

时间:2016-12-13 20:18:03

标签: android xml android-layout android-button

编辑:

为了清楚地说明我在寻找什么,这正是我想要的。

当用户按住按钮(手指仍然在屏幕上)时,我希望它显示一种颜色(例如默认的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来执行此操作,还是我必须使用触摸侦听器手动执行此操作?

2 个答案:

答案 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" />