2014-10-26 221 views
1

我对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; 
    } 
}); 

任何想法?

谢谢。

+0

不要忘了添加android标签,如果你在谈论android :) – 2014-10-26 16:40:05

回答

0

我们不需要每次都调用setPressed(true),而是需要获取按钮的当前状态,然后将setPressed调用到相反的位置。因此,如果按下按钮,我们要调用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; 
    } 
}); 
0

所以,你可以通过XML.To做到这一点更确切地说,在创建文件夹绘制一个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文件。

+0

只是为了记录,从Java改变图像的背景并不是真正的资源友好。它实际上是一种不好的方式来处理这个事情。 – Vlad 2014-10-26 17:12:09