如何在Android上按住按钮时平滑地改变颜色?

时间:2014-06-01 19:26:42

标签: android button

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

如果单击该按钮,它会立即切换到按下状态。

如何制作它,在握住它时平滑地改变颜色,完全过渡需要1秒,就像过渡效果一样? (如果放手,它应该转换回原始状态)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:drawable="@drawable/circle_button_default" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/circle_button_pressed" />
    <item
        android:state_enabled="true"
        android:drawable="@drawable/circle_button_default" />
</selector>

circle_button_default.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>

circle_button_pressed.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>

任何人都知道怎么做?

由于

2 个答案:

答案 0 :(得分:1)

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

Animation fadeout = AnimationUtils.loadAnimation(this, R.anim.fadeout);

按Ctrl + Shift +'O'添加必要的包,然后将动画应用于按钮,如下所示:

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

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

答案 1 :(得分:0)

你可以在你的按钮上创建一个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;
    }
});