Logo Studenta

perez_garrido_alberto_tfg

¡Este material tiene más páginas!

Vista previa del material en texto

Universidad Autónoma de Madrid 
Escuela Politécnica Superior 
Grado en Ingeniería Informática 
TRABAJO DE FIN DE GRADO 
APLICACIÓN ANDROID DE MONITORIZACIÓN Y GENERACIÓN DE 
DATOS ESTADÍSTICOS EN FÚTBOL SALA 
Alberto Pérez Garrido
Tutor: Alejandro Sierra Urrecho
DICIEMBRE 2020
APLICACIÓN ANDROID DE MONITORIZACIÓN Y GENERACIÓN DE 
DATOS ESTADÍSTICOS EN FÚTBOL SALA 
Autor: Alberto Pérez Garrido 
Tutor: Alejandro Sierra Urrecho 
Departamento de Ingeniería Informática 
Escuela Politécnica Superior 
Universidad Autónoma de Madrid 
DICIEMBRE 2020 
Agradecimientos
A mis padres, por apoyarme siempre.
A mi hermano, por actuar como cliente del producto durante su desarrollo.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala I
Abstract
Abstract — Despite the fact that futsal is one of the most practiced sports in Spain, there
are not many applications or services that help clubs and coaches to monitor the information of
each match in order to obtain a better understanding of what is happening in direct and be able
to act accordingly quickly.
The main reason for this fnal degree project is to be able to provide coaches with an
application for Android tablets that meets this objective, to monitor the information of each
player both live and from any previously recorded match and obtain graphs comparing this
personal data with the match data, including monitoring of the time played that will help manage
one of the most critical situations in this sport: e˙ort management.
To do this, this application has been developed for a futsal coach, in such a way that it has
been designed to his liking and with the functionalities that he has believed are essential for
all his colleagues, with a simple design but that reaches all the desired functionality. With this
working method, the project has been carried out as if it were for a client, with periodic meetings
to check the status and analyze what functionality should be maintained and what not in the
fnal version of the application.
The FutsalControl application will allow you to add a team to the device, add players to your
squad and be able to create matches in which data such as goals, passes, shots and fouls of each
player can be recorded live, in order to create graphics for each of these attributes compared to
the team’s total data in that match or in other matches for which data has been recorded.
FutsalControl has been developed in Kotlin through Android Studio, and makes use of the
Android Jetpack library, following the practices recommended by Google, and using cutting-edge
technologies in the development of Android applications such as the use of Databinding for data
binding, the Navigation library for navigation between fragments and a local database using the
Room library.
Key words — Android, Room, Databinding, Android Jetpack, Android Studio, Navigation.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala III
Resumen
Resumen — A pesar de que el fútbol sala es uno de los deportes más practicados en España,
no existen muchas aplicaciones o servicios que ayuden a los clubes y entrenadores a monitorizar
la información de cada partido de cara a obtener un mejor entendimiento de lo que está pasando
en directo y poder actuar en consecuencia de forma rápida.
El motivo principal de este trabajo de fn de grado es poder proporcionar a los entrenadores
una aplicación para tabletas Android que cumpla ese objetivo, monitorizar tanto en directo como
de cualquier partido registrado anteriormente la información de cada jugador y obtener gráfcos
comparando esos datos personales con los datos generales del partido. Además, se incluirá una
monitorización del tiempo jugado que ayudará a gestionar una de las situaciones más críticas de
este deporte: la gestión de esfuerzos.
Para ello, dicha aplicación ha sido desarrollada para un entrenador de fútbol sala, de forma
que se ha diseñado a su gusto y con las funcionalidades que ha creído que son imprescindibles para
todos sus compañeros de profesión, con un diseño simple pero que alcance toda la funcionalidad
deseada. Con este método de trabajo, el proyecto ha sido llevado a cabo como si fuera para un
cliente, con reuniones periódicas para comprobar el estado y analizar qué funcionalidad debía
mantenerse y qué no en la versión fnal de la aplicación.
La aplicación FutsalControl permitirá añadir un equipo al dispositivo, añadir jugadores a su
plantilla y poder crear partidos en los que se podrá registrar en directo datos como goles, pases,
tiros y faltas de cada jugador. Una vez se tengan datos, se podrán crear gráfcos de cada uno
de esos atributos en comparación con los datos totales del equipo en dicho partido o en otros
partidos de los que se hayan registrado datos.
FutsalControl ha sido desarrollada en Kotlin mediante el entorno de Android Studio, y
hace uso de la biblioteca Android Jetpack, siguiendo las prácticas recomendadas por Google.
Adicionalmente, se han utilizando tecnologías punteras en el desarrollo de aplicaciones Android
como el uso de Databinding para vinculación de datos, la biblioteca Navigation para la navegación
entre fragmentos y una base de datos local mediante la biblioteca Room.
Palabras clave — Android, Room, Databinding, Android Jetpack, Android Studio,
Navigation.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala V
Glosario
API Application Programming Interface. 11
DataBinding Biblioteca de Android Jetpack para asociar variables de diseño en sus
correspondientes fragmentos . 27
Git Software de control de versiones . 27
Kotlin Lenguaje de programación para aplicaciones Android. 25
LiveData Tipo de dato observable de Android . 27
Navigation Biblioteca de Android Jetpack para la navegación entre componentes de una
aplicación . 25
Room Biblioteca de Android Jetpack que permite diseñar bases de datos locales en SQLite . 27
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala VII
Índice general
Índice de fguras XI
1. Introducción 1
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Estado del Arte 5
2.1. Futsal Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Mis Estadísticas de Fútbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Basketouch Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Diseño 7
3.1. Sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.1.1. Subsistema de plantilla . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.2.1. Subsistema de creación de partido . . . . . . . . . . . . . . . . . 8
3.1.2.2. Subsistema de convocatoria . . . . . . . . . . . . . . . . . . . . . 8
3.1.2.3. Subsistema de partido . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.3.1. Subsistema de generación de estadísticas . . . . . . . . . . . . . 8
3.1.3.2. Subsistema de visualización de estadísticas . . . . . . . . . . . . 8
3.2. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.1.1. Subsistema de plantilla . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.2.1. Subsistema de creación de partido . . . . . . . . . . . . . . . . . 9
3.2.2.2.Subsistema de convocatoria . . . . . . . . . . . . . . . . . . . . . 9
3.2.2.3. Subsistema de partido . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.3.1. Subsistema de generación de estadísticas . . . . . . . . . . . . . 10
3.2.3.2. Subsistema de visualización de estadísticas . . . . . . . . . . . . 10
3.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4. Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4.1. Biblioteca de persistencias Room . . . . . . . . . . . . . . . . . . . . . . . 11
3.4.2. Diseño de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.5. Diseño de las distintas pantallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala IX
ÍNDICE GENERAL
3.5.1. Pantalla principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.5.2. Pantalla de registro de equipo . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.5.3. Pantalla de adición de jugadores a la plantilla . . . . . . . . . . . . . . . . 17
3.5.4. Pantalla de registro de jugador . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5.5. Pantalla de creación de partido . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5.6. Pantalla de convocatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5.7. Pantalla de partido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.8. Pantalla de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4. Desarrollo 25
4.1. Bibliotecas y tecnologías utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.1. Biblioteca Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.2. Biblioteca DataBinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.3. Tecnologías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2. Desarrollo de los sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. Pruebas y resultados 31
5.1. Pruebas de caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2. Pruebas de caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.3. Pruebas de validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6. Conclusiones y trabajo futuro 33
6.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Bibliografía 35
Apéndices 37
A. Manual del usuario 39
Trabajo de Fin de Grado Alberto Pérez GarridoX
Índice de fguras
3.1. Pantalla inicial de FutsalControl la primera vez que se abre la aplicación. . . . . . 15
3.2. Pantalla inicial de FutsalControl cuando se ha añadido un equipo. . . . . . . . . . 16
3.3. Pantalla para guardar el equipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4. Pantalla de plantilla inicial sin jugadores. . . . . . . . . . . . . . . . . . . . . . . 17
3.5. Pantalla de plantilla inicial con jugadores. . . . . . . . . . . . . . . . . . . . . . . 18
3.6. Pantalla que añade el jugador a la plantilla. . . . . . . . . . . . . . . . . . . . . . 18
3.7. Pantalla de creación del partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.8. Pantalla de convocatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.9. Pantalla de partido por defecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.10. Pantalla de partido hacia la derecha para mostrar relojes. . . . . . . . . . . . . . 21
3.11. Pantalla de partido con datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.12. Relojes de partido con tiempo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.13. Pantalla de estadísticas con gráfco de equipo. . . . . . . . . . . . . . . . . . . . . 23
3.14. Pantalla de estadísticas con gráfco de jugador. . . . . . . . . . . . . . . . . . . . 24
4.1. Mapa de navegación de FutsalControl. . . . . . . . . . . . . . . . . . . . . . . . . 26
A.1. Pantalla inicial sin equipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
A.2. Pantalla de ejemplo al añadir equipo. . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.3. Pantalla de plantilla inicial sin añadir jugadores. . . . . . . . . . . . . . . . . . . 40
A.4. Pantalla de ejemplo de añadir jugador. . . . . . . . . . . . . . . . . . . . . . . . . 41
A.5. Pantalla de plantilla inicial una vez añadidos varios jugadores. . . . . . . . . . . . 41
A.6. Pantalla inicial cuando se ha añadido un equipo. . . . . . . . . . . . . . . . . . . 42
A.7. Pantalla de crear partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.8. Pantalla de convocatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.9. Pantalla de partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
A.10.Pantalla de estadísticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala XI
1 
Introducción
Durante la sección de introducción se explicará la motivación y objetivos del trabajo de fn
de grado para dar una visión global del desarrollo, así como un esquema de la estructura que
tendrá el documento.
1.1. Motivación 
Este documento de memoria de trabajo de fn de grado trata sobre la realización de una
aplicación Android para monitorizar y generar datos estadísticos en fútbol sala.
La motivación principal de este trabajo de fn de grado viene dada por una relación personal.
Mi hermano es entrenador de fútbol sala, y hablando con él descubrimos que no hay muchas
aplicaciones o sistemas que sirvan de ayuda a un entrenador de este deporte de cara a mejorar
el rendimiento de su equipo, cuando en otros deportes como el baloncesto sí que hay más oferta,
ya que es un deporte con más seguimiento en España. De esta forma, se propuso el crear una
aplicación sencilla pero que pudiera almacenar distintos datos que se recogen durante un partido,
tanto generales como de jugadores concretos, para poder ser visualizados en pantalla y poder ser
estudiados mediante gráfcos para obtener una visión más completa de lo que sucede, tanto en
un partido como en una temporada completa.
Para ello, se ha elegido el lenguaje de programación Kotlin, un lenguaje moderno y muy
potente que es a día de hoy el recomendado por Google para el desarrollo de aplicaciones en
su sistema operativo. Debido a que en la vista de partido habrá muchos datos en pantalla, la
aplicación sólo se podrá usar en tabletas.
Desde su concepción, la aplicación que hemos decidido llamar FutsalControl tenía que tener
un diseño muy simple, pero que pueda proporcionar distintas funcionalidades como la gestión de
los jugadores de la plantilla que jugarán cada partido y el añadir con un sólo clic un atributo
como los pases y que se visualice ese cambio al instante, y que fuera sencilla de usar para que
cualquier entrenador que quiera pueda utilizarla.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 1
CAPÍTULO 1. INTRODUCCIÓN
Por lo tanto, el proyecto ha consistido en el desarrollo de esta aplicación con la ayuda de mi
hermano como cliente del producto, de tal forma que se ha ido comprobando con él todo lo que se
añadía mediante reuniones periódicas para que el resultadofnal quedara a su gusto, ya que será
él quien la utilice. También se ha aprovechado dicho desarrollo para satisfacer una motivación
tecnológica como es el uso de tecnologías más avanzadas para el desarrollo de aplicaciones Android
que el las que se usan en asignaturas de la carrera, siendo éstas las pertenecientes a Android
Jetpack, de las que se hablará en la sección de desarrollo de este mismo documento.
1.2. Objetivos 
Los principales objetivos del proyecto llevado a cabo son los siguientes:
1. Desarrollar una aplicación Android para tabletas que permita recoger datos durante un
partido de fútbol sala y genere gráfcos a partir de esos datos.
2. Uso de una interfaz sencilla pero que sea intuitiva para todos los usuarios la primera vez
que usen la aplicación.
3. Diseñar una base de datos robusta que organice bien la información, ya que se harán muchas
consultas debido a la naturaleza de la aplicación.
4. Gestión de la plantilla pudiendo añadir jugadores tanto en el momento en que se añade el
equipo a la aplicación como cuando se va a seleccionar la convocatoria de un partido.
5. Controlar todos los atributos deseados de un jugador durante el partido, incluyendo los
tiempos de juego que registre.
6. Acceder a la pantalla de estadísticas para generar gráfcos desde la pantalla principal y
desde la pantalla del partido.
7. Poder generar un gráfco que compare un atributo entre un jugador concreto y el valor
global, o comparar un atributo de todos los jugadores presentes en un partido.
1.3. Estructura del documento 
La memoria está organizada en los siguientes capítulos, de forma que se detalle todo lo
necesario para conocer tanto la aplicación como el proceso de desarrollo para llevarla a cabo:
Capítulo 2: Estado del arte - Donde se realizará una comparación con distintas
aplicaciones ya existentes que realicen funciones similares a la aplicación aquí descrita.
Capítulo 3: Diseño - En este capítulo se detallará el diseño completo de la aplicación,
incluyendo las distintas pantallas que la componen y cómo se ha diseñado también la base
de datos de la que varias hacen uso.
Capítulo 4: Desarrollo - Capítulo en el que se detallarán las tecnologías utilizadas y
todos los detalles de implementación.
Trabajo de Fin de Grado Alberto Pérez Garrido2
CAPÍTULO 1. INTRODUCCIÓN
Capítulo 5: Pruebas y resultados - Donde se discutirán los resultados obtenidos al
probar la aplicación.
Capítulo 6: Conclusiones y trabajo futuro - Aquí se concluirá el documento tratando
posibles mejoras futuras y conclusiones generales sobre el desarrollo del proyecto.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 3
2 
Estado del Arte
Como ya se ha mencionado el tipo de aplicación que se ha querido conseguir con este trabajo
de fn de grado no es muy común, pero eso no signifca que no existan. A continuación se hablará
de 3 aplicaciones que tienen un objetivo similar al de FutsalControl.
2.1. Futsal Stats 
Comenzamos hablando de Futsal Stats ya que es la que más se parece al objetivo de
FutsalControl. Se trata de una aplicación disponible en la Play Store de Google cuyo objetivo es
más general que el de la monitorización y análisis de datos, pero cuenta con esas funcionalidades.
También cuenta con otras como valorar jugadores, compartir registros, mapas de localización de
disparos o paradas del portero, etc. El que esta aplicación tenga tantas opciones es algo favorable,
pese a que en FutsalControl se ha querido tener una funcionalidad mucho más específca. Sin
embargo el diseño es muy ostentoso y recargado, lo que no facilita su uso, mientras que en
FutsalControl uno de los elementos más importantes de la aplicación es que el diseño sea simple
e intuitivo.
En conclusión, si lo que queremos es usar una aplicación únicamente para el análisis
estadístico entre Futsal Stats y FutsalControl, FutsalControl ofrece un diseño más amigable
y una funcionalidad concreta que abarca más estadísticas.
2.2. Mis Estadísticas de Fútbol 
Mis Estadísticas de Fútbol es otra aplicación disponible en la tienda de Google. En este caso
se trata de una aplicación mucho más generalista en cuanto al deporte, ya que en su descripción
dice que se puede usar para fútbol 5 (el número de jugadores de fútbol sala), 6, 7, 9 o 11. A
pesar de esto, es una aplicación que en cuanto a funcionalidad se queda muy por detrás de
FutsalControl, ya que sólo controla 3 posibles atributos por jugador, como son los goles, las
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 5
CAPÍTULO 2. ESTADO DEL ARTE
asistencias y los goles en propia. Aún así, es una aplicación visualmente agradable y que permite
controlar los jugadores en pista en cada momento y ver las estadísticas registradas, a pesar de
que no sean muchos atributos distintos.
2.3. Basketouch Analytics 
Basketouch Analytics ha sido incluida en este apartado porque a pesar de ser para otro
deporte (baloncesto) tiene una funcionalidad similar en cuanto al análisis de los partidos en
directo, pero es justamente en lo que podría convertirse FutsalControl con más desarrollo. Esto
se debe a que contiene mucho más análisis tanto de nuestro equipo como del rival, pudiendo
generar alineaciones por minutos y con características muy avanzadas que son posibles gracias
a que es una empresa completa la que se dedica al desarrollo de esta aplicación, imposible para
FutsalControl actualmente. Además cuenta con una parte web que complementa la aplicación
móvil para las estadísticas, y ha sido utilizada por la selección de baloncesto de España en el
campeonato mundial de 2019, en el que obtuvieron la medalla de oro.
Trabajo de Fin de Grado Alberto Pérez Garrido6
3 
Diseño
En este capítulo se especifcarán todos los detalles relativos al diseño de FutsalControl, tales
como los requisitos funcionales y no funcionales de la aplicación, el diseño de la base de datos y
las distintas pantallas y sistemas que componen la aplicación.
3.1. Sistemas 
A continuación se detallan los distintos sistemas de los que hace uso la aplicación:
3.1.1. Sistema de equipos 
El sistema de equipos permitirá guardar un equipo en el dispositivo para poder almacenar
jugadores.
3.1.1.1. Subsistema de plantilla
En el subsistema de plantilla el usuario podrá añadir un equipo al dispositivo si no hay uno
ya registrado, y permitirá introducir jugadores de forma inicial a la plantilla, aunque también se
podrán añadir jugadores en el subsistema de partido como ya se explicará en su correspondiente
sección.
3.1.2. Sistema de partidos 
En el sistema de partidos se encuentra toda la funcionalidad que engloba los partidos, la
visualización de los datos de cada jugador en directo y la adición de nuevos datos de forma
rápida. Es el sistema más importante de la aplicación, ya que sin datos recogidos durante un
partido no habrá estadísticas que visualizar.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 7
CAPÍTULO 3. DISEÑO
3.1.2.1. Subsistema de creación de partido
Desde la pantalla principal se podrá seleccionar la opción "Partido", lo que llevará al usuario
a una pantalla que permita la creación de un partido guardando los distintos datos de ese partido,
como el rival, la jornada, la fecha, etc.
3.1.2.2. Subsistema de convocatoria
Después de crear un partido, el usuario deberá seleccionar hasta un máximo de doce jugadores
para ese encuentro de entre todos los disponibles en la plantilla, y dicha funcionalidad se encuentra
en este subsistema. Además, desde la pantalla de selección de plantilla se podrá añadir jugadores
a la plantilla, acción que será una adición normal a la plantilla y no sólo para el partido que se
disputará a continuación.
3.1.2.3. Subsistema de partido
El subsistema de partido contiene toda la funcionalidad específca del partido, como visualizar
el marcador con el tiempo restante, visualizar los datos de distintas estadísticas de jugador, añadir
nuevos valores a esos datos y controlar el tiempode juego y descanso de cada jugador.
3.1.3. Sistema de estadísticas 
El sistema de estadísticas se encargará de toda la funcionalidad referente a la generación y
visualización de gráfcos, siendo la otra parte fundamental de la aplicación junto el sistema de
partidos.
3.1.3.1. Subsistema de generación de estadísticas
En el subsistema de generación de estadísticas se podrá seleccionar tanto a un jugador
concreto como al equipo completo y el atributo deseado mediante dos selectores, y dicha selección
generará un gráfco a partir de los datos almacenados en la base de datos del dispositivo.
3.1.3.2. Subsistema de visualización de estadísticas
Subsistema que se encargará de mostrar el gráfco que genera el subsistema de generación de
estadísticas, que permitirá interactuar con el gráfco para resaltar alguno de sus valores o ampliar
su tamaño.
3.2. Requisitos funcionales 
En esta sección detallaremos los requisitos funcionales de la aplicación catalogados por los
sistemas y subsistemas que ya se han defnido.
Trabajo de Fin de Grado Alberto Pérez Garrido8
CAPÍTULO 3. DISEÑO
3.2.1. Sistema de equipos 
3.2.1.1. Subsistema de plantilla
RF 1 - Añadir un equipo: La aplicación permitirá añadir un equipo si no hay uno en la
base de datos.
RF 2 - Añadir jugadores a la plantilla: Una vez se añada el equipo, se permitirá añadir
tantos jugadores como se desee a la plantilla.
3.2.2. Sistema de partidos 
3.2.2.1. Subsistema de creación de partido
RF 3 - Añadir equipo rival: El usuario podrá escribir el nombre del rival para su
almacenamiento en la base de datos.
RF 4 - Añadir fecha: El usuario podrá guardar la fecha exacta del partido.
RF 5 - Añadir jornada: El usuario podrá añadir la jornada del campeonato que supone
ese partido.
RF 6 - Elegir equipo local: Habrá disponible una caja de selección para indicar si el
equipo del usuario es local o no en el partido.
3.2.2.2. Subsistema de convocatoria
RF 7 - Seleccionar convocados: El usuario podrá seleccionar los 12 jugadores que estarán
disponibles durante el partido a partir de la plantilla completa registrada en la base de datos.
RF 8 - Añadir convocado: Si algún jugador va a disputar el partido pero no está registrado
en la plantilla, se le podrá añadir para el partido y quedará registrado como jugador disponible
en la base de datos.
3.2.2.3. Subsistema de partido
RF 9 - Recoger estadísticas: El usuario podrá ir añadiendo estadísticas a cada jugador
según ocurran en el partido pulsando en el botón correspondiente a ese dato en el jugador deseado.
Dichas estadísticas también serán almacenadas como valores globales del partido en su propia
tabla en la base de datos.
RF 10 - Manejar reloj de partido: Habrá un reloj de partido con cuenta atrás de 20
minutos, que podrá ser parado, reanudado y reiniciado en función de lo que vaya pasando en el
partido.
RF 11 - Acceso a estadísticas: Se podrá acceder en todo momento al sistema de
estadísticas, estando pensado para tiempos muertos o el descanso, y se podrá volver al partido.
RF 12 - Añadir gol rival: Habrá un botón encargado de añadir un gol al equipo rival.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 9
CAPÍTULO 3. DISEÑO
RF 13 - Quitar gol rival: Habrá un botón encargado de quitar un gol al equipo rival.
RF 14 - Sacar jugador a pista: De los 12 jugadores convocados, se podrá indicar qué 5
están actualmente en pista, incluyendo una distinción para el portero.
RF 15 - Cambio de jugadores: Se podrán registrar cambios entre los jugadores que están
en pista.
RF 16 - Contabilizar tiempo de cada jugador: Cada jugador tendrá tres contadores
de tiempo: uno asociado al tiempo jugado desde la última vez que descansó, otro del tiempo
que lleva en el banquillo y un último que cuenta el tiempo total jugado durante todo el partido,
visibles en todo momento.
RF 17 - Contar presencia en goles rivales: Cada vez que se añada un gol al rival, los
jugadores que estén en pista en ese momento añadirán un gol a su contador de presencia en goles
rivales, y lo mismo ocurrirá al quitarlo si ha sido por error.
RF 18 - Expulsar jugador: Cada jugador tendrá un contador de tarjetas que mostrará el
color de la última tarjeta recibida, y en caso de que sea roja ese jugador saldrá automáticamente
de pista y no podrá volver a marcarse como que está jugando, y sus contadores de tiempo se
pararán.
RF 19 - Finalizar partido: Se podrá terminar el partido en cualquier momento, sin
necesidad de que el reloj llegue a cero.
RF 20 - Almacenar estadísticas no mostradas: En casos de estadísticas como pases
fallados y completados, el propio sistema almacenará en otro dato los pases totales de cara al
estudio estadístico de la aplicación, sin que el usuario tenga que añadirlo.
3.2.3. Sistema de estadísticas 
3.2.3.1. Subsistema de generación de estadísticas
RF 21 - Elegir jugador: El usuario podrá seleccionar un jugador concreto para generar
datos sobre él, o podrá seleccionar la opción Todos para comparar el mismo atributo de cada
jugador del partido con el del equipo.
RF 22 - Elegir atributo: El usuario podrá elegir los distintos atributos que quiere visualizar,
pudiendo seleccionar distintos sin tener que salir de la pantalla de estadísticas.
RF 23 - Generar gráfco: Una vez seleccionados los parámetros, se podrá generar el gráfco
deseado, y aunque haya un gráfco ya generado se podrán seleccionar otros atributos y generar
uno distinto.
3.2.3.2. Subsistema de visualización de estadísticas
RF 24 - Visualizar gráfco: El usuario podrá visualizar los gráfcos que genere mediante
el subsistema de generación de estadísticas, y también podrá seleccionar distintos valores para
resaltarlos o hacer más grande el gráfco.
Trabajo de Fin de Grado Alberto Pérez Garrido10
CAPÍTULO 3. DISEÑO
3.3. Requisitos no funcionales 
En esta sección se detallarán los requisitos no funcionales con los que debe contar la aplicación.
RNF 1 - Interfaz sencilla e intuitiva: La interfaz de la aplicación deberá ser simple, pero
de fácil uso y que no haga falta pasar mucho tiempo usándola para familiarizarse con ella.
RNF 2 - Fluidez: La aplicación tendrá que ser rápida a la hora de cambiar entre las distintas
vistas que la componen, así como al generar los gráfcos.
RNF 3 - Privacidad de datos: La aplicación tendrá que ser segura para proteger los datos
de cada equipo dentro del dispositivo.
RNF 4 - Velocidad de acceso a la base de datos: Las acciones que necesiten guardar
datos en la base de datos o acceder a ellos tendrán que ser rápidas para no entorpecer la
experiencia de uso del usuario.
RNF 5 - Android 8.0: La aplicación deberá funcionar en tabletas con Android 8.0 o
superior, correspondientes a la API 26.
3.4. Base de datos 
A continuación detallaremos el esquema de la base de datos. Primero se va a describir qué es
la biblioteca Room, con la que se ha creado la base de datos, para después hablar del diseño de
la misma.
3.4.1. Biblioteca de persistencias Room 
Room [3] [7] es una de las bibliotecas de la ya mencionada Android Jetpack [4], un conjunto de
librerías para seguir las prácticas recomendadas por Google a la hora de desarrollar aplicaciones
para Android.
Esta biblioteca funciona proporcionando una capa de abstracción para una base de datos
SQLite creando una memoria caché en el dispositivo en el que estés utilizando FutsalControl,
de forma que la base de datos y el acceso a ella es local, lo que supone que los usuarios podrán
acceder a la información de su equipo independientemente de si tienen conexión a internet.
Para declarar una tabla en la base de datos mediante Room, lo único que debe hacerse es
sobre una clase de Kotlin añadir una anotación como la siguiente, que es una de las clases y
tablas de FutsalControl:
1 @Entity(tableName = "player_table ") 
2 
3 data class Jugador( 
4 @ColumnInfo(name = "roster_id ") val plantilla_id: String , 
5 @ColumnInfo(name = "name ") val nombre: String , 
6 @ColumnInfo(name = "number ") val dorsal: String , 
7 @ColumnInfo(name = "position") val posicion: String , 
8 @PrimaryKey var id: String = UUID.randomUUID ().toString ()) {} 
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 11
CAPÍTULO 3. DISEÑO
Donde anotamos con la etiqueta @Entity a una clase para que se convierta en una tabla en la
base de datos, y haremos lo mismo pero con la etiqueta @ColumnInfo o @PrimaryKey para las
columnas, pudiendo editar sus nombres en la tabla para que sean distintos de los de las variables
asociados a ellas en código Kotlin.
Para controlar una base de datos mediante Room serán necesarios dos fcheros: un fchero
database en el que declararemos la base de datos y las clases como el ejemplo de Jugador que
compondrán sus tablas, y un fchero DAO en el que se almacenarán las distintas consultas con
las que interactuamos con la base de datos, que se declaran como en el siguiente ejemplo:
1 @Query (" SELECT goals FROM player_data_table WHERE id = :id AND game_id =: 
,→ game_id ") 
2 fun getPlayerGoals(id: String , game_id: String): Int 
3.4.2. Diseño de la base de datos 
En la base de datos de FutsalControl se han declarado 7 tablas distintas, con sus equivalentes
clases en Kotlin. Todas las clases hacen uso de un UUID, o lo que es lo mismo, un identifcador
único universal generado de forma aleatoria. Dichas clases son las siguientes:
Equipo: Tabla que recoge toda la información referente al equipo del usuario, cuyos distintos
campos son:
nombre: Nombre del equipo.
id: Identifcador del equipo.
Plantilla: Plantilla asociada al equipo y que contendrá a los jugadores del mismo, que tendrá
almacenados en ella:
nombre: Nombre de la plantilla.
equipoId: Identifcador del equipo.
id: Identifcador de la plantilla.
Temporada: Temporada durante la que se juegan los partidos del equipo. Sus distintas
columnas en la base de datos son:
curso: Curso donde se disputa la temporada.
categoría: Categoría disputada durante la temporada.
numeroPartidos: Número de partidos que componen una temporada.
equipoId: Identifcador del equipo.
id: Identifcador de la temporada.
Trabajo de Fin de Grado Alberto Pérez Garrido12
CAPÍTULO 3. DISEÑO
Jugador: Jugador sobre el que se guardarán datos en cada partido que se distingue por:
nombre: Nombre del jugador.
posición: Posición en pista del jugador.
dorsal: Dorsal en la camiseta del jugador.
plantillaId: Identifcador de la plantilla.
id: Identifcador personal del jugador.
Partido: Clase que representa cada partido disputado por el equipo y que contiene estos
atributos:
fecha: Fecha del partido.
jornada: Jornada de la temporada en la que se juega el partido.
local: Atributo que determina si nuestro equipo es local o no.
temporadaId: Identifcador de la temporada.
id: Identifcador único del partido.
DatosJugador: Tabla donde se guardarán los datos de cada jugador en los partidos que
dispute, con las columnas de:
fecha: Fecha del partido.
goles: Goles durante el partido.
pasesTotales: Pases que da el jugador durante el partido.
pasesCompletados: Pases exitosos.
pasesFallados: Pases fallados.
perdidasTotales: Pérdidas de balón durante el partido.
faltasCometidas: Faltas que comete el jugador.
faltasRecibidas: Faltas que le realizan al jugador.
tarjetasAmarillas: Tarjetas amarillas recibidas.
tarjetasRojas: Tarjetas rojas recibidas.
tirosAPuerta: Tiros entre los tres palos.
tirosFuera: Disparos fuera de la portería.
tiros: Tiros totales.
recuperaciones: Recuperaciones de balón del jugador.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 13
CAPÍTULO 3. DISEÑO
golesRival: Goles del rival mientras el jugador estaba en pista.
partidoId: Identifcador del partido donde se recogen los datos.
jugadorId: Identifcador del jugador al que le corresponden estos datos.
id: Identifcador único de la entrada de datos de un jugador durante un partido concreto.
DatosPartido: Tabla donde se guardarán los datos de cada partido del equipo, cuenta con
los atributos:
pasesTotales: Pases durante el partido.
pasesCompletados: Pases exitosos.
pasesFallados: Pases fallados.
perdidasTotales: Pérdidas de balón durante el partido.
faltasCometidas: Faltas que comete el equipo.
faltasRecibidas: Faltas que le realizan al equipo.
tarjetasAmarillas: Tarjetas amarillas recibidas.
tarjetasRojas: Tarjetas rojas recibidas.
tirosAPuerta: Tiros entre los tres palos.
tirosFuera: Disparos fuera de la portería.
tiros: Tiros totales.
recuperaciones: Recuperaciones de balón del equipo.
golesEquipo: Goles del equipo durante el partido.
golesRival: Goles del rival.
partidoId: Identifcador del partido donde se recogen los datos.
temporadaId: Identifcador de la temporada.
id: Identifcador único de la entrada de datos de un partido.
3.5. Diseño de las distintas pantallas 
Durante esta última sección del capítulo de diseño, se explicará en detalle cada una de las
distintas pantallas de las que se compone la aplicación, junto con imágenes de las mismas y
explicando cómo se llega a ellas para poder comprender la navegación entre ellas.
Trabajo de Fin de Grado Alberto Pérez Garrido14
CAPÍTULO 3. DISEÑO
3.5.1. Pantalla principal 
Dependiendo de si es la primera vez que se usa la aplicación o no, la pantalla se mostrará
de una forma u otra. Comenzaremos explicando la que se muestra la primera vez que se abre la
aplicación:
Si la aplicación consulta a la base de datos y ve que no hay un equipo registrado, la pantalla
principal se mostrará como un único texto invitando al usuario a añadir un equipo, junto con un
botón fotante que al ser pulsado llevará al usuario a la pantalla de registro de un equipo, de la
que hablaremos a continuación.
Figura 3.1: Pantalla inicial de FutsalControl la primera vez que se abre la aplicación.
Sin embargo, si al abrir la aplicación ya hay un equipo añadido, la pantalla principal mostrará
el nombre de la aplicación junto a dos botones, uno con el texto Partido, para navegar a la pantalla
de creación de partido, y otro con el texto Estadísticas para visitar la pantalla de estadísticas.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 15
CAPÍTULO 3. DISEÑO
Figura 3.2: Pantalla inicial de FutsalControl cuando se ha añadido un equipo.
3.5.2. Pantalla de registro de equipo 
Esta pantalla cuenta únicamente con un cuadro de texto para escribir un nombre para el
equipo y un botón de guardado, que llevará al usuario a la pantalla de adición de jugadores a
la plantilla. Como ya se ha dicho, esa pantalla permitirá añadir jugadores de forma inicial pero
siempre se podrán añadir más en la pantalla de convocatoria.
Figura 3.3: Pantalla para guardar el equipo.
Trabajo de Fin de Grado Alberto Pérez Garrido16
CAPÍTULO 3. DISEÑO
3.5.3. Pantalla de adición de jugadores a la plantilla 
Esta pantalla inicialmente contará con un texto como el de la pantalla principal cuando no
se tiene equipo invitando al usuario a añadir jugadores a la plantilla, junto con un botón fotante
que llevará al usuario a la pantalla de registro de un jugador. Aún así, en el momento que el
usuario añada un jugador, ese texto será sustituido por una vista recicladora con la lista de
jugadores añadidos a la plantilla, para que se vea en todo momento los jugadores ya añadidos,
mientras que el botón fotante se mantiene para poder seguir añadiéndolos. Por último, habrá un
botón con el texto Guardar plantilla cuando el usuario decida que ha añadido todos los jugadores
que quería.
Figura 3.4: Pantalla de plantilla inicial sin jugadores.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 17
CAPÍTULO 3. DISEÑO
Figura 3.5: Pantalla de plantilla inicial con jugadores.
3.5.4. Pantalla de registro de jugador 
La pantalla de registro de un jugador contendrá tres campos de texto, correspondientes al
nombre, dorsal y posición del jugador. También habrá un botón de guardar que tendrá dos
objetivos de navegación dependiendo de desde donde se haya accedido al fragmento, pudiendovolver tanto a la pantalla de adición de jugadores a la plantilla como a la pantalla de convocatoria.
Figura 3.6: Pantalla que añade el jugador a la plantilla.
Trabajo de Fin de Grado Alberto Pérez Garrido18
CAPÍTULO 3. DISEÑO
3.5.5. Pantalla de creación de partido 
Esta es la pantalla donde se registrará la información relativa a un partido con el objetivo
de crearlo. Contendrá un texto con el nombre de la aplicación, tres campos de texto sobre los
que escribir el nombre del rival, la jornada y la fecha del partido respectivamente, y una caja de
selección para marcar al equipo del usuario como local en caso de lo sea, y si no es marcada el
equipo será registrado como visitante. Por último habrá un botón para crear el partido, con el
que se accederá a la pantalla de convocatoria.
Figura 3.7: Pantalla de creación del partido.
3.5.6. Pantalla de convocatoria 
En este fragmento se mostrará una vista recicladora de todos los jugadores de los que se
compone la plantilla, por muy numerosos que sean, junto con un botón fotante con el que se
accederá a la pantalla de registro de jugador. Cuando en esa pantalla se añada un jugador se
volverá a ésta y ese nuevo jugador será visible en la lista de jugadores disponibles.
En esta pantalla el jugador podrá seleccionar jugadores pulsando sobre ellos, momento en
que pasarán a ser de color verde indicando que están convocados, y pudiendo ver que debajo de
la lista hay un mensaje de texto en el que se verán el número de convocados sobre los doce que
pueden elegirse como máximo. Si el usuario se ha equivocado al marcar a un jugador, pulsándolo
de nuevo de desconvocará y el contador de convocados también bajará.
Una vez se haya terminado la convocatoria, si el usuario pulsa el botón de Iniciar partido se
navegará a la pantalla de partido.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 19
CAPÍTULO 3. DISEÑO
Figura 3.8: Pantalla de convocatoria.
3.5.7. Pantalla de partido 
Esta es la pantalla más importante de la aplicación, en la que el usuario encontrará una lista
con los jugadores que ha decidido convocar en la pantalla de convocatoria, cada uno con una
lista de botones con el nombre de su atributo asociado encima y con tres relojes que también
tendrán una etiqueta marcándolos. Por debajo, habrá una línea con distintos botones y textos.
El primero de esos botones es el reloj de partido, que será una cuenta atrás desde veinte y
que podrá ser iniciado o parado en cualquier momento con el botón Iniciar/Parar. Cuando esté
parado, aparecerá un botón al lado con el texto Segunda parte que volverá a poner el contador
a 20, indicando que empiezan los segundos veinte minutos del partido tras el descanso.
Después se encontrará el marcador del partido [8], que mostrará los goles del equipo en el
lugar que se haya marcado al crear el partido seleccionando si el equipo del usuario era local o
no. Junto al marcador habrá dos botones para añadir o quitar goles al equipo rival, ya que los
goles del equipo del usuario se actualizarán al añadirle goles a cada jugador.
Por último nos encontramos con los botones de Estadísticas, con el que accederemos a
la pantalla de estadísticas, y Finalizar partido para terminar el partido, pudiendo hacerlo en
cualquier momento independientemente de que el reloj haya llegado a cero.
Para poder registrar datos de un jugador, habrá que marcar al jugador como que está en
pista, acción que se realiza pulsando sobre él. Esto hará que se marque cambiando su color e
iniciando sus relojes de partido, pudiendo ya pulsar los botones que actualizan sus datos. Sólo
podrá haber a la vez cinco jugadores marcados como que están en pista, por lo que si pulsamos
sobre otro jugador cuando ya hay cinco no lo marcará como que está jugando. Para que esto
ocurra tendremos primero que pulsar sobre uno de los jugadores que está en pista para sacarlo
y que se inicie su reloj de Tiempo en el banquillo para después pulsar sobre el jugador que
queríamos sacar a pista y que se realice el cambio.
Trabajo de Fin de Grado Alberto Pérez Garrido20
CAPÍTULO 3. DISEÑO
Figura 3.9: Pantalla de partido por defecto.
Figura 3.10: Pantalla de partido hacia la derecha para mostrar relojes.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 21
CAPÍTULO 3. DISEÑO
Figura 3.11: Pantalla de partido con datos.
Figura 3.12: Relojes de partido con tiempo.
Trabajo de Fin de Grado Alberto Pérez Garrido22
CAPÍTULO 3. DISEÑO
3.5.8. Pantalla de estadísticas 
Nada más acceder a esta pantalla se verán dos selectores, uno con nombres de jugadores y otro
con atributos de esos jugadores, junto con un botón Generar gráfco y otro Volver, este último
pudiendo volver a la pantalla de partido o a la pantalla principal dependiendo de desde dónde
se haya llegado a esta pantalla. Si el usuario ha seleccionado un jugador y un atributo, al pulsar
Generar gráfco aparecerá en la pantalla un gráfco de tarta comparando el atributo seleccionado
de ese jugador con el total del equipo. Sin embargo, si selecciona como jugador Todos se mostrará
un gráfco de barras que comparará el atributo seleccionado de todos los jugadores del partido,
incluyendo el total del equipo. Si no se selecciona una de las dos opciones, por defecto se cogerá
la primera de la lista de opciones disponibles.
Figura 3.13: Pantalla de estadísticas con gráfco de equipo.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 23
CAPÍTULO 3. DISEÑO
Figura 3.14: Pantalla de estadísticas con gráfco de jugador.
Trabajo de Fin de Grado Alberto Pérez Garrido24
4 
Desarrollo
Durante este apartado se detallará tanto las distintas bibliotecas y tecnologías de las que
hace uso la aplicación como el desarrollo concreto de los distintos sistemas de la aplicación.
Como información general, ha sido desarrollada mediante el lenguaje Kotlin debido a que es el
que Google recomienda para sus aplicaciones y que es un lenguaje que reduce signifcativamente
las líneas de código en comparación con Java, el lenguaje más popular a la hora de desarrollar
aplicaciones para este sistema operativo. Para los fcheros de diseño se ha utilizado XML.
4.1. Bibliotecas y tecnologías utilizadas 
En esta primera sección se describen las distintas bibliotecas que se han utilizado para mejorar
el funcionamiento de la aplicación, así como otras tecnologías incluidas con el mismo propósito.
4.1.1. Biblioteca Navigation 
La biblioteca Navigation [6] [10] proporciona una forma elegante y sencilla de navegación en-
tre fragmentos [9]. La aplicación está construida con una única actividad, que va intercambiando
los distintos fragmentos que se corresponden con cada pantalla. Para esto se ha utilizado naviga-
tion, ya que con añadir en cada fchero XML de diseño de un fragmento la etiqueta <layout> crea
una entrada en el fragmento navigation.xml, en el que se pueden ir conectando estas entradas de
fragmentos creando acciones entre ellas, como se ve en la fgura 4.1. Una vez tenemos creadas
en ese mapa de navegación las acciones, únicamente tenemos que referenciarlas de la siguiente
forma para poder realizar transiciones entre fragmentos:
1 view.findNavController ().navigate(R.id . action_mainPageFragment_to_gameFragment) 
Código que podremos colocar en cualquier función setOnClickListener de un botón.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 25
https://view.findNavController().navigate(R.id
CAPÍTULO 4. DESARROLLO
Figura 4.1: Mapa de navegación de FutsalControl.
Trabajo de Fin de Grado Alberto Pérez Garrido26
CAPÍTULO 4. DESARROLLO
4.1.2. Biblioteca DataBinding 
La biblioteca DataBinding [5] permite sustituir la función fndViewById() para ir encontran-
do cada elemento declarado en un fchero de diseño por una única variable binding. Al igual
que con la biblioteca Navigation se puede usar al envolver el fchero de diseño en una etiqueta
<layout>, pudiendo entonces declararse de la siguienteforma:
1 val binding = DataBindingUtil .inflate <FragmentMainBinding >(inflater , R.layout. 
,→ fragment_main ,container ,false) 
Una vez tenemos la variable binding declarada, si por ejemplo tuviéramos un cuadro de texto
llamado nombre, podríamos acceder a él únicamente usando binding.nombre.
De esta forma, se consigue mantener un código más reducido y limpio y en el que todas las
variables de diseño se encuentran centralizadas a partir de una sola, en vez de tener que declarar
una por cada elemento distinto como se tenía que hacer antes.
4.1.3. Tecnologías 
Otras tecnologías utilizadas durante el desarrollo de la aplicación son la ya mencionada
biblioteca Room, el uso de datos LiveData y la biblioteca MPAndroidChart [1] [2] para la
generación de gráfcos, cuya página se encuentra en las referencias de este mismo documento.
Para el control de versiones se ha utilizado Git, con un proyecto alojado en GitHub ya que
Android Studio permite la integración con este sitio web.
4.2. Desarrollo de los sistemas 
La estructura general del proyecto esta dividido entre dos carpetas, el paquete futsalcontroltfg
que contiene todos los fcheros de código kotlin y la carpeta res que contiene los fcheros de diseño
XML.
Dentro del paquete de kotlin se distingue entre distintas carpetas, como son:
Clases: Clases Kotlin que son entidades de la base de datos.
Database: Ficheros DAO y Database ya mencionados en el apartado de la biblioteca
Room.
Fragmentos y actividades: Todos los fragmentos y la actividad de la aplicación.
4.2.1. Sistema de equipos 
El sistema de equipos se encarga de añadir un equipo a la base de datos y controlar la
plantilla, y aunque se pueda añadir jugadores desde el sistema de partidos, clasifcaremos ese
fragmento como de este sistema.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 27
CAPÍTULO 4. DESARROLLO
Los fcheros que componen este sistema son MainFragment.kt, ya que cuando no hay un
equipo será desde este fragmento desde donde iremos a añadirlo, NewTeamFragment.kt para
poder añadir el equipo, NewRosterFragment.kt para mostrar los jugadores que ya hemos añadido
a la plantilla y acceder al fragmento que añade más, y por último NewPlayerFragment.kt para
añadir un jugador nuevo a la plantilla.
El elemento más destacable de estos cuatro fcheros es el uso de una lista recicladora de
jugadores en NewRosterFragment.kt para mostrar los jugadores de la plantilla, debido a que
los otros fcheros son muy simples gracias a que hacen uso de DataBinding para acceder a sus
recursos gráfcos y Navigation para trasladarse entre ellos.
4.2.2. Sistema de partidos 
Este sistema, como ya se ha dicho en otros capítulos, es el más importante de la aplicación.
Está compuesto por tan sólo tres fcheros: CreateGameFragment.kt para poder crear cada par-
tido que vaya a disputar el equipo, PlayerListFragment.kt para seleccionar la convocatoria que
jugará el partido y GameFragment.kt para controlar todos los aspectos del mismo. Como en el
sistema de equipos, se siguen usando vistas recicladoras para las listas de jugadores, con especial
complejidad en la vista recicladora de GameFragment.kt, ya que el elemento que se recicla (el
jugador) tiene muchos botones para los atributos del partido y los relojes. Como en todas las
vistas recicladoras, es necesario crear un adapter y un holder para cada elemento, y es en la
función bind() de este último donde se realiza toda la lógica de los botones de cada jugador,
como por ejemplo éste extracto de código de dicha función en el que se cubre la funcionalidad
del botón que añade goles a un jugador y al partido:
1 goal_button. setOnClickListener { 
2 if(this.jugador.enPista && tarjetas < 2) { 
3 this.jugador.marcaGol () 
4 goal_button.text = this.jugador.goles.toString () 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
,→ 
,→ 
,→ 
,→ 
,→ 
,→ 
shotOnGoal_button . text = this . jugador . tirosAPuerta . toString () 
partido . golesEquipo () 
if ( partido . local ) { 
marcador . golMarcado (" local ") 
localGoals . text = marcador . golesLocal . toString () 
futsalControlViewModel . golesLocales = marcador . golesLocal 
} else { 
marcador . golMarcado (" visitante ") 
visitantGoals . text = marcador . golesVisitante . toString () 
futsalControlViewModel . golesVisitantes = marcador . golesVisitante 
} 
executor . execute { 
database ?. futsalControlDao () ?. updatePlayerDataGoals ( this . jugador . 
goles , partido .id , this . jugador . id ) 
database ?. futsalControlDao () ?. updateGameDataGoals ( partido . 
golesEquipo , partido . id ) 
database ?. futsalControlDao () ?. updatePlayerShotsOnGoal ( this . jugador . 
tirosAPuerta , partido .id , this . jugador . id ) 
database ?. futsalControlDao () ?. updateGameShotsOnGoal ( partido . 
tirosAPuerta , partido . id ) 
database ?. futsalControlDao () ?. updatePlayerShots ( this . jugador . tiros , 
partido .id , this . jugador . id ) 
database ?. futsalControlDao () ?. updateGameShots ( partido . tiros , partido 
. id ) 
}}} 
28 Trabajo de Fin de Grado Alberto Pérez Garrido
https://GameFragment.kt
https://GameFragment.kt
https://PlayerListFragment.kt
https://CreateGameFragment.kt
https://NewRosterFragment.kt
https://NewPlayerFragment.kt
https://NewRosterFragment.kt
https://NewTeamFragment.kt
https://MainFragment.kt
CAPÍTULO 4. DESARROLLO
Donde como se puede ver se actualiza el texto del botón para que muestre el valor actualizado,
se registra el cambio en el marcador global y mediante un ejecutor se realizan los update necesarios
en la base de datos de forma muy rápida. El código de la mayoría de botones es muy similar a
este, pero sin actualizar tantos atributos con un solo cambio.
4.2.3. Sistema de estadísticas 
El tercer y último sistema es el de estadísticas, en el que únicamente se encuentra el fchero
StatisticsFragment.kt. En este fchero se hace uso de la biblioteca MPAndroidChart para la ge-
neración de gráfcos. Por ejemplo, si quisiéramos pintar en pantalla un gráfco de tarta con solo
dos valores con esta librería, necesitaríamos un código como el siguiente:
1 val entries = mutableListOf <PieEntry >() 
2 val data = arrayListOf <Float >(0F, 0F) 
3 data [0] = 1F 
4 data [1] = 2F 
5 entries.add(PieEntry(data[0], "Jugador ")) 
6 entries.add(PieEntry(data[1], "Equipo ")) 
7 
8 val set = PieDataSet(entries , atributo) 
9 binding.pieChart.data = PieData(set) 
10 
11 val colorFirst = context ?.let { ContextCompat .getColor(it , R.color. colorPrimary) 
,→ } 
12 val colorSecond = context ?.let { ContextCompat.getColor(it, R.color. colorAccent) 
,→ } 
13 
14 set.colors = mutableListOf(colorFirst , colorSecond) 
Y de forma muy simple se consigue un gráfco. Para nuestra aplicación, los valores de data
vienen dados por dos selectores que eligen entre el jugador y el atributo que se quiere poner en
el gráfco, pero la funcionalidad más signifcativa de este fchero es la de crear gráfcos con una
librería externa.
Para incluir esta librería en nuestro proyecto, lo único que debemos hacer es incluir el si-
guiente código en nuestro build.gradle:
1 repositories { 
2 maven { url ’https :// jitpack.io ’ } 
3 } 
4 
5 dependencies { 
6 implementation ’com.github.PhilJay:MPAndroidChart:v3.1.0 ’ 
7 } 
Y ya podremos ejecutar código como el que hemos puesto de ejemplo.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 29
https://jitpack.io
https://StatisticsFragment.kt
5 
Pruebas y resultados
Una vez se completó el desarrollo de la aplicación se procede a realizar las distintas pruebas
que comprueban su correcto funcionamiento, y si cumple con los requisitos especifcados en el
apartado de diseño. En este documento se ha dividido entre pruebas de caja negra, pruebas de
caja blanca y pruebas de validación.
5.1. Pruebas de caja negra 
Las pruebas de caja negra suponen probar el software sin tener en cuenta la lógica interna
del producto, lo que supone comprobar si el funcionamientogeneral de la aplicación es bueno y
se corresponde con lo que inicialmente se propuso. Estas pruebas se han ido realizando durante
todo el desarrollo, no solo cuando el producto estaba terminado, de forma que cada vez que había
una funcionalidad nueva se comprobaba su éxito para corregir los errores de forma rápida si los
hubiera.
Como prueba general de caja negra, se utilizó la aplicación para almacenar los datos en tiempo
real de un partido grabado. Esta prueba se realizó en numerosas ocasiones durante el desarrollo,
ya que en las primeras pruebas se descubrieron errores o funcionalidades que se podrían incluir.
Estos errores fueron corregidos y probados en la siguiente prueba, y así de forma sucesiva hasta
el estado fnal de la aplicación.
5.2. Pruebas de caja blanca 
Estas pruebas sí que tienen en cuenta la lógica interna de la aplicación, y han sido realizadas
para cada uno de los fragmentos de forma exhaustiva cada vez que se desarrollaba alguno, de
forma que sólo se pasaba al siguiente fragmento a desarrollar si el último pasaba todas las pruebas
a las que se le sometía. De esta forma, se podían localizar los errores más fácilmente que si se
dejaran todos por arreglar una vez el producto estuviera terminado.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 31
CAPÍTULO 5. PRUEBAS Y RESULTADOS
La realización de las pruebas de caja blanca ha sido posible gracias a que Android Studio
permite probar actividades y fragmentos en solitario, sin el conjunto de la aplicación. De esta
forma, se podía comprobar cada fragmento nuevo de forma individual, exceptuando las pruebas
de navegación en las que sí era necesario probar toda la aplicación.
5.3. Pruebas de validación 
Por último, las pruebas de validación consisten en comprobar si se han cumplido los requisitos
propuestos, tanto los funcionales como los no funcionales.
Estas pruebas debían darse en un partido en directo, pero debido a la situación sanitaria se
han realizado de la misma forma que las de caja negra, mediante grabaciones de partidos.
Tras la realización de estas pruebas, se puede asegurar que FutsalControl cumple con todos
los requisitos que se diseñaron, de forma que el desarrollo se puede considerar exitoso, ya que el
resultado fnal satisface al público para el que fue creada la aplicación.
5.4. Resultados 
Como resultado del trabajo de fn de grado desarrollado se ha obtenido la aplicación
FutsalControl. Esta aplicación puede instalarse en tabletas con una versión de Android válida
mediante un fchero APK generado por Android Studio, debido a que de momento no estará
disponible en la tienda de aplicaciones de Google.
Como ya se ha explicado en las pruebas, el resultado fnal del TFG es un producto
satisfactorio, que cumple con la motivación que llevó a realizar el proyecto y que se espera
que sea utilizado por distintos entrenadores para ayudarles en su trabajo.
Trabajo de Fin de Grado Alberto Pérez Garrido32
6 
Conclusiones y trabajo futuro
Para terminar el documento, en este capítulo se resumirán las conclusiones a las que se ha
llegado después del desarrollo del trabajo de fn de grado y del posible trabajo futuro que podría
seguir el desarrollo de FutsalControl para mejorar el producto.
6.1. Conclusiones 
Como se explicó en el apartado de motivación de este documento, esta aplicación pretendía
ser una ayuda simple pero efcaz para los entrenadores de fútbol sala, de forma que pudieran
mejorar el rendimiento de sus equipos.
Durante el desarrollo de la aplicación esa funcionalidad ha sido cubierta, incluso añadiendo
alguna funcionalidad no planeada inicialmente y obteniendo muchas ideas que podrían mejorar
la aplicación en un futuro.
El resultado fnal cumple con las expectativas, debido a que su diseño es simple pero muy
intuitivo a la hora de usarlo. Se pueden manejar distintos datos tanto de jugadores como de
equipos para luego poder visualizar gráfcos que comparan esos datos, y refejar así la incidencia
que tienen ciertos jugadores sobre el partido. De la misma forma, el entrenador puede durante
un partido controlar los esfuerzos de sus jugadores mediante los relojes de partido personales de
cada jugador, algo que desde el primer momento se consideró de mucha importancia para el éxito
de la aplicación. Por estos motivos, el resultado fnal es una aplicación que cumple su propósito
y podrá ayudar a muchos profesionales de este deporte.
6.2. Trabajo futuro 
Por la naturaleza de la aplicación desarrollada, aún hay unos cuantos factores que pueden
mejorar la aplicación. Una de las mejoras podría ser la posibilidad de imprimir los gráfcos cuando
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 33
CAPÍTULO 6. CONCLUSIONES Y TRABAJO FUTURO
se generan, para tener varios en papel y que no dependan de un dispositivo electrónico. Otra
posible mejora sería la posibilidad de manejar distintos equipos a la vez dentro de un mismo
dispositivo, de forma que clubes enteros puedan manejar sus distintos equipos desde el mismo
lugar.
El fútbol sala es un deporte muy parecido al baloncesto o al balonmano, por lo que con
pocos cambios el código de FutsalControl podría ser extensible para hacer aplicaciones de otros
deportes, como esos dos ya mencionados, o incluso una única aplicación en la que seleccionar el
deporte y que se adapte a esa elección.
Por último, en el apartado de estado del arte se mencionó BasketTouch, un conjunto de
aplicación móvil y web con mucha más profundidad que FutsalControl pero con la misma base,
por lo que el desarrollo de esta aplicación debería ponerse como objetivo futuro llegar a ser igual
de profunda y contar con un servicio web que complemente a la aplicación móvil.
Trabajo de Fin de Grado Alberto Pérez Garrido34
Bibliografía
[1] Philipp Jahoda (2014). Mpandroidchart [online]. Avaliable: https://github.com/PhilJay/ 
MPAndroidChart.
[2] Ashra˙ Hathibelagal (2015). Add charts to your android app using mpan-
droidchart [online]. Avaliable: https://code.tutsplus.com/tutorials/ 
add-charts-to-your-android-app-using-mpandroidchart--cms-23335.
[3] Android Developers (2020). Biblioteca de persistencias room [online]. Avaliable: https: 
//developer.android.com/topic/libraries/architecture/room.
[4] Android developers. Android jetpack [online]. Avaliable: https://developer.android. 
com/jetpack.
[5] Android developers (2019). Databinding [online]. Avaliable: https://developer.android. 
com/jetpack/androidx/releases/databinding.
[6] Android developers (2019). Navigation [online]. Avaliable: https://developer.android. 
com/guide/navigation.
[7] Android developers (2020). Android room with a view [online]. Avaliable: https: 
//developer.android.com/codelabs/android-room-with-a-view-kotlin#0.
[8] Android developers (2020). Complex lifecycle situations [online]. Avaliable: https:// 
developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0.
[9] Android developers (2020). Create a fragment [online]. Avaliable: https://developer. 
android.com/codelabs/kotlin-android-training-create-and-add-fragment#0.
[10] Android developers (2020). Defne navigation paths [online]. Avaliable: https:// 
developer.android.com/codelabs/kotlin-android-training-add-navigation#0.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 35
https://github.com/PhilJay/MPAndroidChart
https://github.com/PhilJay/MPAndroidChart
https://code.tutsplus.com/tutorials/add-charts-to-your-android-app-using-mpandroidchart--cms-23335
https://code.tutsplus.com/tutorials/add-charts-to-your-android-app-using-mpandroidchart--cms-23335
https://developer.android.com/topic/libraries/architecture/room
https://developer.android.com/topic/libraries/architecture/room
https://developer.android.com/jetpack
https://developer.android.com/jetpack
https://developer.android.com/jetpack/androidx/releases/databinding
https://developer.android.com/jetpack/androidx/releases/databinding
https://developer.android.com/guide/navigationhttps://developer.android.com/guide/navigation
https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0
https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0
https://developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0
https://developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0
https://developer.android.com/codelabs/kotlin-android-training-create-and-add-fragment#0
https://developer.android.com/codelabs/kotlin-android-training-create-and-add-fragment#0
https://developer.android.com/codelabs/kotlin-android-training-add-navigation#0
https://developer.android.com/codelabs/kotlin-android-training-add-navigation#0
Apéndices 
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 37
A 
Manual del usuario
En este apéndice A se va a mostrar un manual de usuario que cubrirá el primer uso de la
aplicación para un usuario, cuando inicia la aplicación sin tener un equipo añadido.
Al entrar en la aplicación lo primero que se verá será una pantalla con un texto invitando al
usuario a añadir un equipo y un botón fotante con el símbolo +.
Figura A.1: Pantalla inicial sin equipo.
Al pulsar en ese botón, el usuario accederá a la pantalla de creación de un equipo, donde
deberá indicar un nombre y pulsar el botón de guardado para acceder entonces a la página de
adición de jugadores a la plantilla.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 39
APÉNDICE A. MANUAL DEL USUARIO
Figura A.2: Pantalla de ejemplo al añadir equipo.
Nada más acceder, al no haber aún jugadores, se mostrará un texto invitando al usuario a
añadir jugadores a la plantilla mediante el botón fotante.
Figura A.3: Pantalla de plantilla inicial sin añadir jugadores.
Al hacerlo, se accederá a la pantalla de creación de un jugador, donde se tendrá que indicar
su nombre, dorsal y posición. Una vez añadido, se volverá a la pantalla anterior, pero esta vez
en lugar del mensaje se verá una lista de los jugadores añadidos a la plantilla. El usuario podrá
realizar este proceso tantas veces como quiera.
Trabajo de Fin de Grado Alberto Pérez Garrido40
APÉNDICE A. MANUAL DEL USUARIO
Figura A.4: Pantalla de ejemplo de añadir jugador.
Figura A.5: Pantalla de plantilla inicial una vez añadidos varios jugadores.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 41
APÉNDICE A. MANUAL DEL USUARIO
Cuando se decida a pulsar el botón de Guardar plantilla, se volverá a la pantalla principal,
esta vez con los botones de Partido y Estadísticas. Como es la primera vez usando la aplicación
y no hay partidos registrados, procedemos a pulsar el de partido.
Figura A.6: Pantalla inicial cuando se ha añadido un equipo.
La siguiente pantalla que verá el usuario es la de creación de partido, donde podrá introducir
el nombre del equipo rival, la fecha y la jornada del partido. También podrá marcar si su equipo
juega como local o no. Cuando pulse el botón de creación de partido, se procederá a la pantalla
de convocatoria.
Trabajo de Fin de Grado Alberto Pérez Garrido42
APÉNDICE A. MANUAL DEL USUARIO
Figura A.7: Pantalla de crear partido.
En esta pantalla el jugador verá una lista con los jugadores que contiene su plantilla,
pudiendo realizar el mismo proceso de añadir jugador que ya ha realizado anteriormente con el
botón fotante. Para convocar jugadores deberá pulsar sobre los que quiera convocar, cambiando
entonces el color de ese jugador y actualizándose el contador sobre los doce que se pueden
seleccionar como máximo. Para desconvocar un jugador bastará con pulsar sobre él otra vez.
Cuando se pulse el botón de jugar partido, se pasará a la pantalla de partido.
Figura A.8: Pantalla de convocatoria.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 43
APÉNDICE A. MANUAL DEL USUARIO
En la pantalla de partido, el usuario verá una lista con los jugadores que ha decidido convocar
en la pantalla de convocatoria, cada uno con una lista de botones de distintos atributos y con
tres relojes.
Debajo de esa lista encontrará el reloj de partido, que podrá ser iniciado o parado en cualquier
momento con el botón Iniciar/Parar, y cuando esté parado, aparecerá un botón al lado con el
texto Segunda parte para indicar que empiezan los segundos veinte minutos del partido tras el
descanso.
Después se encontrará el marcador del partido, que mostrará los goles del equipo y del rival
junto con dos botones para añadir o quitar goles al equipo rival.
Por último nos encontramos con los botones de Estadísticas, con el que accederemos a la
pantalla de estadísticas, y Finalizar partido para terminar el partido.
Para que el jugador pueda registrar datos deberá pulsar sobre él y cambiará su color siempre
y cuando no haya ya cinco jugadores en pista, en cuyo caso deberá pulsar sobre uno que esté
jugando y sacarlo para realizar el cambio.
Figura A.9: Pantalla de partido.
Si el usuario pulsa en fnalizar partido volverá a la pantalla inicial, pero si pulsa sobre
estadísticas accederá a la pantalla de estadísticas.
Nada más entrar, el jugador verá tan sólo dos selectores con un botón de generar gráfco y
otro para volver. En el primer selector podrá seleccionar qué jugador quiere ver, y en el segundo
qué atributo. Una vez seleccionados, si pulsa el botón para generar el gráfco aparecerá el gráfco
deseado.
Trabajo de Fin de Grado Alberto Pérez Garrido44
APÉNDICE A. MANUAL DEL USUARIO
Figura A.10: Pantalla de estadísticas.
Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 45
	Índice de figuras
	Introducción
	Motivación
	Objetivos
	Estructura del documento
	Estado del Arte
	Futsal Stats
	Mis Estadísticas de Fútbol
	Basketouch Analytics
	Diseño
	Sistemas
	Sistema de equipos
	Subsistema de plantilla
	Sistema de partidos
	Subsistema de creación de partido
	Subsistema de convocatoria
	Subsistema de partido
	Sistema de estadísticas
	Subsistema de generación de estadísticas
	Subsistema de visualización de estadísticas
	Requisitos funcionales 
	Sistema de equipos
	Subsistema de plantilla
	Sistema de partidos
	Subsistema de creación de partido
	Subsistema de convocatoria
	Subsistema de partido
	Sistema de estadísticas
	Subsistema de generación de estadísticas
	Subsistema de visualización de estadísticas
	Requisitos no funcionales 
	Base de datos 
	Biblioteca de persistencias Room 
	Diseño de la base de datos 
	Diseño de las distintas pantallas
	Pantalla principal
	Pantalla de registro de equipo
	Pantalla de adición de jugadores a la plantilla
	Pantalla de registro de jugador
	Pantalla de creación de partido
	Pantalla de convocatoria
	Pantalla de partido
	Pantalla de estadísticas
	Desarrollo
	Bibliotecas y tecnologías utilizadas
	Biblioteca Navigation
	Biblioteca DataBinding
	Tecnologías
	Desarrollo de los sistemas
	Sistema de equipos
	Sistema de partidos
	Sistema de estadísticas
	Pruebas y resultados
	Pruebas de caja negra
	Pruebas de caja blanca
	Pruebas de validación
	Resultados
	Conclusiones y trabajo futuro
	Conclusiones
	Trabajo futuro
	Bibliografía
	Apéndices
	Manual del usuario

Continuar navegando