2017-10-29 14 views
0

私は2つのbuttonsを持っており、プログラムでコード化されています(私はXMLファイルがありません)。私は背景onClickをトグルしようとしていますが、トグルしていません。ImageButtonの背景がプログラムで切り替えることはありません

Thisは廃止されており、thisは機能しませんでした。私はXMLでそれを行う方法を知っていますが、私が述べたように、私は持っていません。クリック時にImageButtonの背景を適切に切り替えるにはどうすればよいですか? buttonsをクリックすると背景が変わりますが、はそれをそのままクリックするまでのままです。すぐに元の状態に戻したいと思う。 buttons(。ただ、関連buttonコードを示すの間でのコードの多く)の

インスタンス化:リスナーの

static final int leftFireButtonID = 3; 
static final int rightFireButtonID = 4; 

private boolean isLeftButtonClicked = false; 
private boolean isRightButtonClicked = false; 

leftFireButton = new ImageButton(this); 
rightFireButton = new ImageButton(this); 

leftFireButton.setImageResource(R.drawable.red_button); 
rightFireButton.setImageResource(R.drawable.red_button); 

コード:

leftFireButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      soundPool.play(soundID,1.0f,0.5f,1,0,1.0f); //Pew pew gunfire 

      if(view.getId() == leftFireButtonID) { 
       isLeftButtonClicked = !isLeftButtonClicked; 
       view.setBackgroundResource(isLeftButtonClicked ? R.drawable.red_button_pressed : R.drawable.red_button); //stays...needs to change back 
      } 
     } 
    }); 
    rightFireButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      soundPool.play(soundID, 0.5f, 1.0f, 1, 0, 1.0f); //Pew pew gunfire 

      if(view.getId() == rightFireButtonID) { 
       isRightButtonClicked = !isRightButtonClicked; 
       view.setBackgroundResource(isRightButtonClicked ? R.drawable.red_button_pressed : R.drawable.red_button); //stays....needs to change back 
      } 
     } 
    }); 

これはXMLセレクタととても簡単でした。どんな助けもありがとうございます。

+3

代わりに 'OnTouchListener'を使用する必要があります。 'OnClickListener'は' ACTION_UP'イベントの後でのみ起動します。 –

+0

私はちょうど今私の通知を確認するために戻ってくる前にそれをした。笑。私はそれを考え出してうれしい。しかし、コメントありがとう! – IRGeekSauce

答えて

0

急いで自分自身を得ました。それを正しくしなかった。 を設定してACTION.DOWNACTION.UPを取得します。 :-)

leftFireButton.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch(motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       leftFireButton.setBackgroundResource(R.drawable.red_button_pressed); 
       soundPool.play(soundID,1.0f,0.5f,1,0,1.0f); //pew pew gunfire 
       return true; 
      case MotionEvent.ACTION_UP: 
       leftFireButton.setBackgroundResource(R.drawable.red_button); 
       return true; 
     } 
     return false; 
    } 
}); 
rightFireButton.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch(motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       rightFireButton.setBackgroundResource(R.drawable.red_button_pressed); 
       soundPool.play(soundID,1.0f,0.5f,1,0,1.0f); //pew pew gunfire 
       return true; 
      case MotionEvent.ACTION_UP: 
       rightFireButton.setBackgroundResource(R.drawable.red_button); 
       return true; 
     } 
     return false; 
    } 
}); 
+1

良い仕事....おめでとう.. –

関連する問題