一旦未按应用程序,则需要按钮返回到正常状态

时间:2018-10-02 21:07:58

标签: android android-studio

我希望用户将手指从屏幕上移开后,我的按钮似乎会被按下。我正在使用两个图像来模拟被按下的底部。任何帮助都很好

ImageButton imageButton;
boolean isPressed =  true;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageButton =(ImageButton) findViewById(R.id.buttonID);
    final MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.sound);

    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isPressed) {
                imageButton.setBackgroundResource(R.drawable.image);
            }
            else{
                imageButton.setBackgroundResource(R.drawable.ispressed);
            }
            isPressed = !isPressed;
            mediaPlayer.start();
            Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
        }
    });
}

}

1 个答案:

答案 0 :(得分:1)

这是使用"State list" drawable的不错选择。您创建一个可绘制对象,其中一个图像用于“按下”状态,另一图像用于默认状态,然后将其分配给按钮。您不必对按钮背景进行任何实时更新;它会自动为您在两张图片之间转换。

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

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

</selector>

现在,您只需直接将按钮背景设置为此(使用Java或XML):

imageButton =(ImageButton) findViewById(R.id.buttonID);
imageButton.setBackgroundResource(R.drawable.selector);

然后您不必在OnClickListener中进行任何更新:

imageButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        isPressed = !isPressed;
        mediaPlayer.start();
        Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
    }
});