按钮状态改变

时间:2014-10-26 16:35:20

标签: android button ontouchlistener

我对Android编程很新,我遇到了麻烦。我想制作一个按钮,在按下时改变它的状态,因此它必须按下状态而不按下状态。我设法使按钮更改状态按下并保持这样但我不知道如何再次单击时返回到未按下状态。 这是我的代码。

   <Button
    android:id="@+id/scaunstg"
    android:layout_width="170dp"
    android:layout_height="70dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@drawable/scaunstg"
    android:baselineAlignBottom="true"
    android:clickable="true" />

该按钮有一个xml文件,用于控制显示的图像。

scaunstg.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // show interest in events resulting from ACTION_DOWN
        if(event.getAction()==MotionEvent.ACTION_DOWN) return true;

        // don't handle event unless its ACTION_UP so "doSomething()" only runs once.
        if(event.getAction()!=MotionEvent.ACTION_UP) return false;
        // doSomething();
        scaunstg.setPressed(true);                   
        return true;
    }
});

有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我们需要获取按钮的当前状态,然后调用setPressed,而不是直接调用setPressed(true)。因此,如果按下按钮,我们要调用setPressed(false),如果按钮未被按下,则setPressed(true)。

我们可以使用按钮的isPressed()方法,然后使用not运算符(!)来反过来。

scaunstg.setOnTouchListener(new OnTouchListener() 
{
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        // show interest in events resulting from ACTION_DOWN
        if (event.getAction() == MotionEvent.ACTION_DOWN) 
           return true;

        // don't handle event unless its ACTION_UP so "doSomething()" only runs once.
        if (event.getAction() != MotionEvent.ACTION_UP) 
           return false;

        // doSomething();
        scaunstg.setPressed( !scaunstg.isPressed() );
        return true;
    }
});

答案 1 :(得分:0)

所以,你可以通过XML来做到这一点。更确切地说,在drawable文件夹中创建一个xml文件(如果你还没有创建文件夹的话)

<?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/btn_sendemail_disable" />
   <item
    android:state_pressed="true"
    android:state_enabled="true"
    android:drawable="@drawable/btn_send_email_click" />
   <item
    android:state_focused="true"
    android:state_enabled="true"
    android:drawable="@drawable/btn_sendemail_roll" />
   <item
    android:state_enabled="true"
    android:drawable="@drawable/btn_sendemail" />
</selector>

因此,您只需将按钮指向此xml文件的链接作为资源。