Я создаю приложение с кнопками, и когда кнопка нажата, она воспроизводит звук. Моя проблема в том, что я не смог найти способ изменить фон mSoundButton при нажатии и отпускании. Я использую 'background' вместо 'sr c', поэтому я могу сжать кнопку, не обрезая края. Я еще не добавил звуки, потому что хочу решить эту проблему перед тем, как начать добавлять звуки.
Вот мои коды для кнопки в MainActivity. java (Работает нормально, но не так, как я хотел. Он меняет фон, когда нажата, но не отпущена.)
final ImageButton mSoundBtn;
final boolean[] soundBtnClicked = {false};
mSoundBtn = findViewById(R.id.soundButton);
mSoundBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(soundBtnClicked[0])
mSoundBtn.setBackgroundResource(R.drawable.button_clicked);
else
mSoundBtn.setBackgroundResource(R.drawable.button_not_clicked);
soundBtnClicked[0] = !soundBtnClicked[0];
}
});
и вот моя активность. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/soundButton"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="@drawable/button_not_clicked"
android:contentDescription="TODO" />
</LinearLayout>
ОБНОВЛЕНИЕ (ПРОБЛЕМА РЕШЕНА):
Я хотел, чтобы mSoundBtn изменил изображение при нажатии, а затем снова изменил изображение, когда оно будет выпущено. Я использовал класс Handler
и метод postDelayed()
, чтобы создать задержку между двумя изменениями изображения. На самом деле он не ждет, пока пользователь отпустит кнопку, но все же решил мою проблему. Вот решение, которое я нашел:
public ImageButton mSoundBtn;
Handler h = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSoundBtn = findViewById(R.id.soundButton);
mSoundBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSoundBtn.setBackgroundResource(R.drawable.button_clicked);
h.postDelayed(new Runnable() {
public void run() {
mSoundBtn.setBackgroundResource(R.drawable.button_not_clicked);
}
}, 1000); // 1 Second
}
});
Что происходит, когда mSoundBtn нажимается, он меняет изображение и ждет 1000 миллисекунд (1 секунда), а затем возвращается к предыдущему изображению, которое создает некоторую анимацию когда она нажата, чтобы пользователь мог понять, когда нажата кнопка.
Спасибо всем, кто пытался помочь, спасибо за чтение. :)