2

こんにちは、xml にボタンがありOnTouchListener、アクティビティで使用してbuttonプレスとリリースを取得しています。しかし問題は、ボタンを押しても背景色が変わらないことです。5月に拡張するとOnClickListener、バックグラウンドでのアクティビティが変化します。私のコードの何が問題なのか誰にもわかりますか。

 public class pushbuttonActivity extends Activity implements OnTouchListener {
@Override
        public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
            setContentView(R.layout.push_button_layout);
            GPIO_0_B  = (Button) findViewById(R.id.GPIO_0);
        GPIO_0_B.setOnTouchListener((OnTouchListener) this); 
     }

    public boolean onTouch(View v,MotionEvent event) {
            switch(v.getId()) {
                case R.id.GPIO_0 :  GPIOPORT=0;
                            break;

            default      :  break;                  
            }

            if(event.getAction() == MotionEvent.ACTION_DOWN) {
               //Do something on touch    
                 } else if (event.getAction() == MotionEvent.ACTION_UP) {
                  //Do something in release
                 } 
            return true;
        }

push_button_layout.xml

<RelativeLayout .........
.................
      <Button
        android:id="@+id/GPIO_0"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="@drawable/round_button"
        android:textStyle="bold"
        android:textSize="14sp"
        android:text="GPIO 0" 
        android:layout_marginTop="15dp" 
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="50dp"
       />

round_button.xml

<?xml version="1.0" encoding="utf-8" ?> 
     <selector xmlns:android="http://schemas.android.com/apk/res/android">


         <!--  Non focused states 
      --> 
      <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/round_button_unfocused" /> 
      <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/round_button_unfocused" /> 

       <!--  Focused states 
      --> 
      <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/round_button_focus" /> 
      <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/round_button_focus" /> 
     <!--  Pressed 
      --> 
      <item android:state_pressed="true" android:drawable="@drawable/round_button_press" /> 
    </selector>

round_button_focus.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
  <stroke 
        android:width="1dp"
        android:color="#FF404040" /> 
  <corners 
        android:radius="6dp" /> 

  <size android:height="40dp"
       android:width="40dp"/>

  <gradient
        android:startColor="#FF6800" 
        android:centerColor="#FF8000" 
        android:endColor="#FF9700" 
        android:angle="90" /> 
</shape>

round_button_press.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
  <stroke 
        android:width="2dp"
        android:color="#FF606060" /> 
  <corners 
        android:radius="40dp" /> 
  <gradient
        android:startColor="#FF0000" 
        android:centerColor="#FF0000" 
        android:endColor="#FF0000" 
        android:angle="90" /> 
</shape>

round_button_unfocus.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
  <stroke 
        android:width="2dp"
        android:color="#FF606060" /> 
  <corners 
        android:radius="40dp" /> 
  <gradient
        android:startColor="#550000" 
        android:centerColor="#550000" 
        android:endColor="#550000" 
        android:angle="90" /> 
</shape>

そして長文失礼いたしました…。

4

5 に答える 5

5
@Override
public boolean onTouch(View v, MotionEvent event) {

    switch(event.getAction()) {

        case MotionEvent.ACTION_DOWN:
            v.setPressed(true);
            //doYourWorkHere();
            break;
        case MotionEvent.ACTION_UP:
            v.setPressed(false);
            //doYourWorkHere();
            break;
        }

    return true;/* true to deactivate other listeners at the same time; false otherwise */
}
于 2016-08-11T15:44:37.007 に答える
2

xml でボタンの背景としてレイアウトを設定するだけでうまくいきます。次のように、eg:clickedstate.xml という名前のドローアブル フォルダーに 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/default_bgnd" />

<item     android:state_focused="true"        
android:drawable="@drawable/new_green" />

<item     android:state_pressed="true"        
android:drawable="@drawable/new_green" />

<item     android:state_checked="true"        
android:drawable="@drawable/new_green"/>

<item     android:state_selected="true"        
android:drawable="@drawable/new_green" /> 
</selector> 

あなたのxmlでは、ボタンに対してこれを行うだけです

android:background="@drawable/clickedstate"
于 2013-09-17T11:37:46.400 に答える
2

Ontouch を使用すると、ボタンの Clicked 状態を取得できません

Onclick Cozを使用し、onclickメソッドでボタンの押された状態がtrueになります

実際には、ボタンのクリックとリリースを取得する必要があります

これを使用してクリックとリリースを取得します

GPIO_0_B.setOnClickListener(new OnClickListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {

            GPIO_0_B.setBackground(R.drawable.round_button_focus);

        } else if (event.getAction() == MotionEvent.ACTION_UP) {

            GPIO_0_B.setBackground(R.drawable.round_button_unfocused);
        }
    }
};

タッチリスナーの場合、この行を変更します GPIO_0_B.setOnClickListener(new OnClickListener() {

GPIO_0_B.setOnTouchListener(new OnTouchListener() {

そのIDをどうすればいいですか、実際には複数のボタンがあります

でこれを行いonCreate()ます:

   {
     Button GPIO_0_B1 =(Button) findViewById(R.id.youridfromxml);
     Button GPIO_0_B1 =(Button) findViewById(R.id.youridfromxml);

     GPIO_0_B1.setOnClickListener(getOnClickDoSomething(GPIO_0_B1);
     GPIO_0_B2.setOnClickListener(getOnClickDoSomething(GPIO_0_B2);
   }

create new method (oncreate() メソッドの外:- noobs の情報)

View.OnClickListener getOnClickDoSomething(final Button Gpbot)
{
    return new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {

                Gpbot.setBackground(R.drawable.round_button_focus);

            } else if (event.getAction() == MotionEvent.ACTION_UP) {

                Gpbot.setBackground(R.drawable.round_button_unfocused);
            }
        }
    }
}
于 2013-09-17T11:24:14.677 に答える
1

これを実現するには、onclick イベント リスナーを介して以下のコードを使用できます。

       StateListDrawable states = new StateListDrawable(); 

        Drawable image_normal = //drawable of the image
        Drawable image_focused =  //drawable of the image
        Drawable image_pressed =  //drawable of the image

        states.addState(new int[] {android.R.attr.state_pressed},image_focused);
        states.addState(new int[] {android.R.attr.state_focused},image_pressed);       
        states.addState(new int[] { },image_normal);  
        buttonObj.setBackgroundDrawable(states);
于 2013-09-17T11:33:52.367 に答える
0

このコードで試してください。

 @Override
 public boolean onTouch(View view, MotionEvent event) {
     view.setSelected(true);
     ...
    return true;

 }
于 2014-11-23T09:56:22.520 に答える