2017-10-29 85 views
0

我有两个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

让自己匆忙。没有正确地做。设置一个onTouchListener得到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

干得好....恭喜.. – 2017-10-29 04:29:23