在android上按住按钮时如何平滑地更改颜色?

在android上按住按钮时如何平滑地更改颜色?,android,button,Android,Button,在我的应用程序中,我有一个使用样式的按钮,该样式引用选择器背景,然后为其默认和按下状态定义一个形状xml 如果我点击按钮,它会立即变为按下状态 我怎样才能使它在你握住它的时候平滑地改变颜色,并且需要1秒才能完全过渡,就像过渡效果一样?(如果您放弃,它将转换回原始状态) 圆圈按钮默认值.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk

在我的应用程序中,我有一个使用样式的按钮,该样式引用选择器背景,然后为其默认和按下状态定义一个形状xml

如果我点击按钮,它会立即变为按下状态

我怎样才能使它在你握住它的时候平滑地改变颜色,并且需要1秒才能完全过渡,就像过渡效果一样?(如果您放弃,它将转换回原始状态)


圆圈按钮默认值.xml

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="#ff9517"/>
    <stroke android:width="2sp" android:color="#fff" />
</shape>

圆圈按钮按下。xml

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="#d47300"/>
    <stroke android:width="2sp" android:color="#fff" />
</shape>

有人知道怎么做吗


谢谢

您可以使用此设置按钮的动画

Animation fadeout = AnimationUtils.loadAnimation(this, R.anim.fadeout);
按Ctrl+Shift+O添加必要的软件包,然后将动画应用于按钮,如下所示:

public void click (View v){
 button1.startAnimation(fadeout);}

如果您计划设置多个按钮的动画,请将它们粘贴到网格并将动画应用到网格。

您可以在按钮上创建一个
OnTouchListener
,然后从那里检查按钮是否当前按下或已按下

示例:

    youBUtton.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
           // on release
        }else{
           // on touch
        }
        return false;
    }
});

这将导致在单击按钮时动画运行,然后如果松开,动画仍将继续,直到完成。我想要它,这样动画将只在您按住按钮时运行。如果你松开,它应该反转动画并转换回原始状态。我如何检测他们何时松开按钮?@omega If(event.getAction()==MotionEvent.ACTION_UP)那么你在触摸按钮时如何检测?@omegablock@omega是我的错你知道怎么做吗?
    youBUtton.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
           // on release
        }else{
           // on touch
        }
        return false;
    }
});