Przeglądaj źródła

android: Shape/spacing adjustments to game card

Ripple effect now reaches into rounded corners, icon size changed, company text removed, title font adjusted, and spacing around the card was adjusted as well. Text also doesn't get cut off anymore and instead scrolls indefinitely on one line.
Charles Lombardo 3 lat temu
rodzic
commit
388dc0757f

+ 10 - 6
src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt

@@ -6,6 +6,7 @@ package org.yuzu.yuzu_emu.adapters
 import android.annotation.SuppressLint
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
+import android.text.TextUtils
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -31,7 +32,7 @@ class GameAdapter(private val activity: AppCompatActivity) :
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameViewHolder {
         // Create a new view.
         val binding = CardGameBinding.inflate(LayoutInflater.from(parent.context), parent, false)
-        binding.root.setOnClickListener(this)
+        binding.cardGame.setOnClickListener(this)
 
         // Use that view to create a ViewHolder.
         return GameViewHolder(binding)
@@ -58,7 +59,7 @@ class GameAdapter(private val activity: AppCompatActivity) :
         lateinit var game: Game
 
         init {
-            itemView.tag = this
+            binding.cardGame.tag = this
         }
 
         fun bind(game: Game) {
@@ -73,11 +74,14 @@ class GameAdapter(private val activity: AppCompatActivity) :
             }
 
             binding.textGameTitle.text = game.title.replace("[\\t\\n\\r]+".toRegex(), " ")
-            binding.textGameCaption.text = game.company
 
-            if (game.company.isEmpty()) {
-                binding.textGameCaption.visibility = View.GONE
-            }
+            binding.textGameTitle.postDelayed(
+                {
+                    binding.textGameTitle.ellipsize = TextUtils.TruncateAt.MARQUEE
+                    binding.textGameTitle.isSelected = true
+                },
+                3000
+            )
         }
     }
 

+ 53 - 51
src/android/app/src/main/res/layout/card_game.xml

@@ -1,64 +1,66 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:foreground="?attr/selectableItemBackground"
-    android:clickable="true"
-    android:clipToPadding="false"
-    android:focusable="true"
-    android:paddingStart="4dp"
-    android:paddingTop="8dp"
-    android:paddingEnd="4dp"
-    android:paddingBottom="8dp"
-    android:transitionName="card_game">
+    android:layout_height="wrap_content">
 
     <com.google.android.material.card.MaterialCardView
         style="?attr/materialCardViewElevatedStyle"
-        android:id="@+id/card_game_art"
-        android:layout_width="140dp"
-        android:layout_height="140dp"
-        app:cardCornerRadius="4dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
+        android:id="@+id/card_game"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="?attr/selectableItemBackground"
+        android:clickable="true"
+        android:clipToPadding="false"
+        android:focusable="true"
+        android:transitionName="card_game"
+        android:layout_gravity="center"
+        app:cardElevation="0dp"
+        app:cardCornerRadius="12dp">
 
-        <ImageView
-            android:id="@+id/image_game_screen"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="6dp">
 
-    </com.google.android.material.card.MaterialCardView>
+            <com.google.android.material.card.MaterialCardView
+                style="?attr/materialCardViewElevatedStyle"
+                android:id="@+id/card_game_art"
+                android:layout_width="150dp"
+                android:layout_height="150dp"
+                app:cardCornerRadius="4dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent">
 
-    <com.google.android.material.textview.MaterialTextView
-        style="@style/TextAppearance.Material3.BodyLarge"
-        android:id="@+id/text_game_title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:ellipsize="end"
-        android:maxLines="2"
-        android:paddingTop="8dp"
-        android:textAlignment="viewStart"
-        app:layout_constraintEnd_toEndOf="@+id/card_game_art"
-        app:layout_constraintStart_toStartOf="@+id/card_game_art"
-        app:layout_constraintTop_toBottomOf="@+id/card_game_art"
-        tools:text="Super Mario Odyssey" />
+                <ImageView
+                    android:id="@+id/image_game_screen"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent" />
 
-    <com.google.android.material.textview.MaterialTextView
-        style="@style/TextAppearance.Material3.BodyMedium"
-        android:id="@+id/text_game_caption"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:ellipsize="end"
-        android:lines="1"
-        android:maxLines="1"
-        android:paddingTop="8dp"
-        android:textAlignment="viewStart"
-        app:layout_constraintEnd_toEndOf="@+id/card_game_art"
-        app:layout_constraintStart_toStartOf="@+id/card_game_art"
-        app:layout_constraintTop_toBottomOf="@+id/text_game_title"
-        tools:text="Nintendo" />
+            </com.google.android.material.card.MaterialCardView>
+
+            <com.google.android.material.textview.MaterialTextView
+                style="@style/TextAppearance.Material3.TitleMedium"
+                android:id="@+id/text_game_title"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
+                android:textAlignment="center"
+                android:textSize="14sp"
+                android:singleLine="true"
+                android:marqueeRepeatLimit="marquee_forever"
+                android:ellipsize="none"
+                android:requiresFadingEdge="horizontal"
+                app:layout_constraintEnd_toEndOf="@+id/card_game_art"
+                app:layout_constraintStart_toStartOf="@+id/card_game_art"
+                app:layout_constraintTop_toBottomOf="@+id/card_game_art"
+                tools:text="The Legend of Zelda: Skyward Sword" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </com.google.android.material.card.MaterialCardView>
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>

+ 1 - 1
src/android/app/src/main/res/values/dimens.xml

@@ -11,7 +11,7 @@
     <dimen name="spacing_refresh_start">32dp</dimen>
     <dimen name="spacing_refresh_end">96dp</dimen>
     <dimen name="menu_width">256dp</dimen>
-    <dimen name="card_width">160dp</dimen>
+    <dimen name="card_width">165dp</dimen>
 
     <dimen name="dialog_margin">20dp</dimen>
     <dimen name="elevated_app_bar">3dp</dimen>