在 `if` 中判斷 `ImageButton` 當前背景以決定播放/暫停狀態,但 `getBackground()` 返回 `Drawable`,難以直接比較資源 ID。
**不要**檢視 UI 狀態,**要**維護邏輯狀態變數。
private boolean isPlaying = false; // 邏輯狀態
private void togglePlayPause() {
if (isPlaying) {
pause();
isPlaying = false;
button.setBackgroundResource(R.drawable.start_bg); // 顯示播放圖示
} else {
resume();
isPlaying = true;
button.setBackgroundResource(R.drawable.pause_bg); // 顯示暫停圖示
}
}
// 綁定點擊
button.setOnClickListener(v -> togglePlayPause());
定義 `res/drawable/btn_play_pause.xml`:
<selector xmlns:android="https://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/pause_bg" />
<item android:drawable="@drawable/start_bg" />
</selector>
佈局中:
<ImageButton
android:id="@+id/btnPlay"
android:background="@drawable/btn_play_pause"
android:clickable="true"
android:focusable="true" />
程式碼:
ImageButton btn = findViewById(R.id.btnPlay);
btn.setOnClickListener(v -> {
boolean playing = btn.isSelected();
btn.setSelected(!playing); // 自動切換背景
if (playing) pause(); else resume();
});
用 `boolean isPlaying` 或 `btn.setSelected()` 維護狀態,UI 依狀態渲染。Selector 讓 XML 宣告式管理狀態圖示,程式碼更簡潔健壯。