Add hollow border to selected menu items and fix scroll view in landscape mode

This commit is contained in:
cmclark00 2025-03-31 08:48:33 -04:00
parent c4f103ae1e
commit 7e4423efce
3 changed files with 94 additions and 44 deletions

View file

@ -38,6 +38,11 @@ import android.widget.Toast
import android.content.BroadcastReceiver
import android.content.IntentFilter
import android.app.AlertDialog
import android.graphics.drawable.ColorDrawable
import androidx.core.content.ContextCompat
import android.widget.Button
import android.widget.ScrollView
import android.widget.ImageButton
class MainActivity : AppCompatActivity(),
GamepadController.GamepadConnectionListener,
@ -61,6 +66,7 @@ class MainActivity : AppCompatActivity(),
private lateinit var progressionScreen: ProgressionScreen
private lateinit var themeSelector: ThemeSelector
private lateinit var blockSkinSelector: BlockSkinSelector
private var pauseMenuScrollView: ScrollView? = null
// Game state
private var isSoundEnabled = true
@ -124,6 +130,7 @@ class MainActivity : AppCompatActivity(),
progressionManager = PlayerProgressionManager(this)
themeSelector = binding.themeSelector
blockSkinSelector = binding.blockSkinSelector
pauseMenuScrollView = binding.pauseMenuScrollView
// Initialize gamepad controller
gamepadController = GamepadController(gameView)
@ -1227,6 +1234,14 @@ class MainActivity : AppCompatActivity(),
item.alpha = if (i == index) 1.0f else 0.7f
item.scaleX = if (i == index) 1.2f else 1.0f
item.scaleY = if (i == index) 1.2f else 1.0f
// Add or remove border based on selection
if (item is Button) {
item.background = if (i == index) {
ContextCompat.getDrawable(this, R.drawable.menu_item_selected)
} else {
ColorDrawable(Color.TRANSPARENT)
}
}
}
}
@ -1237,6 +1252,7 @@ class MainActivity : AppCompatActivity(),
if (pauseMenuItems.isEmpty()) return
currentMenuSelection = (currentMenuSelection - 1 + pauseMenuItems.size) % pauseMenuItems.size
highlightMenuItem(currentMenuSelection)
scrollToSelectedItem()
gameHaptics.vibrateForPieceMove()
}
@ -1247,8 +1263,30 @@ class MainActivity : AppCompatActivity(),
if (pauseMenuItems.isEmpty()) return
currentMenuSelection = (currentMenuSelection + 1) % pauseMenuItems.size
highlightMenuItem(currentMenuSelection)
scrollToSelectedItem()
gameHaptics.vibrateForPieceMove()
}
private fun scrollToSelectedItem() {
if (pauseMenuItems.isEmpty()) return
val selectedItem = pauseMenuItems[currentMenuSelection]
val scrollView = pauseMenuScrollView ?: return
// Calculate the item's position relative to the scroll view
val itemTop = selectedItem.top
val itemBottom = selectedItem.bottom
val scrollViewHeight = scrollView.height
// If the item is partially or fully below the visible area, scroll down
if (itemBottom > scrollViewHeight) {
scrollView.smoothScrollTo(0, itemBottom - scrollViewHeight)
}
// If the item is partially or fully above the visible area, scroll up
else if (itemTop < 0) {
scrollView.smoothScrollTo(0, itemTop)
}
}
/**
* Activate the currently selected menu item