From 2e12d2738dd142850aeffacf9d59c3bbbe42b60e Mon Sep 17 00:00:00 2001 From: Nerwyn Singh Date: Sun, 29 Dec 2024 03:37:37 -0500 Subject: [PATCH] update google tv dpad example to have more accurate tap areas and add traditional remote dpad example --- README.md | 237 ++++++++++++++++++++++++++++++------ assets/traditional_dpad.png | Bin 0 -> 17470 bytes 2 files changed, 201 insertions(+), 36 deletions(-) create mode 100644 assets/traditional_dpad.png diff --git a/README.md b/README.md index 2817f86..820bd87 100644 --- a/README.md +++ b/README.md @@ -1419,7 +1419,7 @@ custom_actions: ## Example 13 -Style navigation buttons (NOT `dpad`) to be like the Google TV app remote. **NOTE**: You have to add the provided row styles to the three rows of your navigation buttons, otherwise they will skew to the side on smaller displays. You can find the CSS IDs of your navigation button rows by hovering over the remote in the editor as described [in this section](#css-styles). +Style `dpad` to be like the Google TV app remote. **NOTE**: You have to add the provided overall styles including matching the row number. You can find the CSS IDs of your navigation button rows by hovering over the remote in the editor as described [in this section](#css-styles). google tv app styled dpad @@ -1429,24 +1429,31 @@ Style navigation buttons (NOT `dpad`) to be like the Google TV app remote. **NOT ```yaml type: custom:android-tv-card -remote_id: remote.google_tv rows: - - - navigation_buttons + - - dpad custom_actions: - type: button name: center tap_action: action: key key: DPAD_CENTER - icon: mdi:checkbox-blank-circle + icon: '' styles: |- :host { - --icon-color: rgb(94, 94, 94); - --size: 200px; - background: rgb(31, 31, 31); - border-radius: 200px; - margin: -70px; - padding: 70px; + border-radius: 50%; + z-index: 2; + pointer-events: none; + width: 200px; + height: 200px; + top: -75px; + left: -75px; + } + button { + height: 80%; + width: 80%; + border-radius: 50%; + background: rgb(94, 94, 94); + pointer-events: all; } - type: button name: up @@ -1457,12 +1464,14 @@ custom_actions: action: repeat icon: mdi:chevron-up styles: |- - :host { - --icon-color: rgb(197, 199, 197); - z-index: 2; - top: 25px; - height: 90px; - width: 300px; + button { + top: 10%; + left: 10%; + border-radius: 0; + } + .icon { + transform: rotate(-45deg); + color: rgb(197, 199, 197); } - type: button name: down @@ -1473,12 +1482,14 @@ custom_actions: action: repeat icon: mdi:chevron-down styles: |- - :host { - --icon-color: rgb(197, 199, 197); - z-index: 2; - bottom: 25px; - height: 90px; - width: 300px; + button { + bottom: 10%; + right: 10%; + border-radius: 0; + } + .icon { + transform: rotate(-45deg); + color: rgb(197, 199, 197); } - type: button name: left @@ -1489,12 +1500,14 @@ custom_actions: action: repeat icon: mdi:chevron-left styles: |- - :host { - --icon-color: rgb(197, 199, 197); - z-index: 2; - left: 30px; - height: 170px; - width: 90px; + button { + bottom: 10%; + left: 10%; + border-radius: 0; + } + .icon { + transform: rotate(-45deg); + color: rgb(197, 199, 197); } - type: button name: right @@ -1504,23 +1517,175 @@ custom_actions: hold_action: action: repeat icon: mdi:chevron-right + styles: |- + button { + top: 10%; + right: 10%; + border-radius: 0; + } + .icon { + transform: rotate(-45deg); + color: rgb(197, 199, 197); + } +styles: |- + .button-pad { + gap: 98px; + border-radius: 50%; + overflow: hidden; + background: rgb(31, 31, 31); + } + .button-pad .empty-button { + width: 0; + height: 0; + } + .button-pad remote-button { + top: -125%; + left: -125%; + width: 170px; + height: 170px; + transform: rotate(45deg); + z-index: 1; + } + #row-1 { + width: fit-content; + } +custom_icons: [] +``` + + + +## Example 14 + +Style `dpad` to be like a traditional tv remote. **NOTE**: You have to add the provided overall styles. + +traditional remote styled dpad + +
+ +Remote Config + +```yaml +type: custom:android-tv-card +rows: + - dpad +custom_actions: + - type: button + name: center + tap_action: + action: key + key: DPAD_CENTER + icon: ok styles: |- :host { - --icon-color: rgb(197, 199, 197); + --size: 36px; + top: -30%; + left: -30%; + width: 160%; + height: 160%; + border: 1px solid rgba(0,0,0,0.5); + border-radius: 50%; + transform: rotate(0deg); + background: radial-gradient(circle at top left,#303030 15%,#101010 100%); z-index: 2; - right: 30px; - height: 170px; - width: 90px; + } + .icon { + color:rgba(128,128,128,0.8); + } + - type: button + name: up + tap_action: + action: key + key: DPAD_UP + hold_action: + action: repeat + icon: mdi:chevron-up + styles: |- + .icon { + transform:rotate(-45deg); + color: rgba(96,96,96,0.8); + } + button { + border-radius: 0; + } + - type: button + name: down + tap_action: + action: key + key: DPAD_DOWN + hold_action: + action: repeat + icon: mdi:chevron-down + styles: |- + .icon { + transform:rotate(-45deg); + color: rgba(96,96,96,0.8); + } + button { + border-radius: 0; + } + - type: button + name: left + tap_action: + action: key + key: DPAD_LEFT + hold_action: + action: repeat + icon: mdi:chevron-left + styles: |- + .icon { + transform:rotate(-45deg); + color: rgba(96,96,96,0.8); + } + button { + border-radius: 0; + } + - type: button + name: right + tap_action: + action: key + key: DPAD_RIGHT + hold_action: + action: repeat + icon: mdi:chevron-right + styles: |- + .icon { + transform:rotate(-45deg); + color: rgba(96,96,96,0.8); + } + button { + border-radius: 0; } styles: |- - #row-1, #row-2, #row-3 { - justify-content: center; + .button-pad { + gap: 14px; + border: 1px solid #444; + border-radius: 50%; + overflow: hidden; + background: radial-gradient(circle at top left,#202020 15%,#303030 100%); + } + .button-pad .empty-button { + width: 0; + height: 0; + } + .button-pad remote-button { + top: -40%; + left: -40%; + width: 180%; + height: 180%; + transform: rotate(45deg); + overflow: hidden; + border-radius: 0; } +custom_icons: + - name: ok + path: >- + M7 7A2 2 0 005 9V15A2 2 0 007 17H9A2 2 0 0011 15V9A2 2 0 009 7H7M7 + 9H9V15H7V9ZM13 7V17H15V13.7L17 17H19L16 12 19 7H17L15 10.3V7H13Z ```
-## Example 14 +## Example 15 A music player with multiple sliders for volume and media position and a touchpad for media controls and album art. @@ -1628,7 +1793,7 @@ custom_actions: -## Example 15 +## Example 16 Multiple sliders for light color control. diff --git a/assets/traditional_dpad.png b/assets/traditional_dpad.png new file mode 100644 index 0000000000000000000000000000000000000000..910598b76e79848ad95d2799e76fec996a72543c GIT binary patch literal 17470 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 literal 0 HcmV?d00001