ARNOLD STIVEN ALFONSO CONTRERAS
Transcript of ARNOLD STIVEN ALFONSO CONTRERAS
1
APLICACIÓN MÓVIL PARA EL APRENDIZAJE DEL LENGUAJE BRAILLE Y LA
SIGNOGRAFÍA BÁSICA USADA EN LAS ÁREAS DE MATEMÁTICAS Y MÚSICA
EN PERSONAS VIDENTES
ARNOLD STIVEN ALFONSO CONTRERAS
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD TECNOLÓGICA
TECNOLOGÍA EN SISTEMATIZACIÓN DE DATOS BOGOTÁ
2016
2
APLICACIÓN MÓVIL PARA EL APRENDIZAJE DEL LENGUAJE BRAILLE Y LA
SIGNOGRAFÍA BÁSICA USADA EN LAS ÁREAS DE MATEMÁTICAS Y MÚSICA
EN PERSONAS VIDENTES
ARNOLD STIVEN ALFONSO CONTRERAS
Trabajo de grado para optar por el título de Tecnólogo en Sistematización de
Datos
Tutor
ING. JOSE VICENTE REYES MOZO
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS
FACULTAD TECNOLOGICA
TECNOLOGIA EN SISTEMATIZACION DE DATOS
BOGOTA
2016
3
AGRADECIMIENTOS
Para empezar deseo agradecer a mi familia por ser un punto de apoyo durante mi
carrera, sin su ellos habría sido muy difícil poder cumplir las metas que me
propuse cuando ingresé a la universidad.
Por otro lado, quiero agradecer a mi querida amiga Nathaly Jaimes quien me dio
su apoyo y me animó a culminar este proyecto cuando estaba pasando por
momentos difíciles.
Un reconocimiento especial a los docentes y estudiantes del Centro Integral José
María Córdoba por participar en las pruebas del software, sin ellos habría sido
muy difícil encontrar las falencias en la aplicación que se pudieron solucionar
gracias a sus sugerencias.
Quiero agradecer a mi Tutor José Vicente Reyes por orientarme en el desarrollo
de este documento respondiendo algunas dudas que tenía.
Por ultimo a la Universidad Distrital Francisco José de Caldas pues sin ella no
habría sido posible que este proyecto llegara a elaborarse
A todos ellos muchas gracias.
4
DEDICATORIA
Dedico esta monografía a mis padres y hermanos por su apoyo en todo momento, por darme la oportunidad de tener una excelente educación en el transcurso de este proceso, por los valores que me enseñaron desde muy temprana edad y su ayuda en momentos difíciles, es para mí un orgullo mostrar el resultado de los esfuerzos que
ellos realizaron para que pueda crecer profesionalmente. No fue fácil y sin su ayuda habría sido muy difícil lograrlo.
A los profesores de la Universidad Distrital Francisco José de Caldas los cuales fueron los encargados de brindarme el conocimiento necesario para finalizar
este proyecto.
Para obtener sabiduría es necesario experimentar ciertas vivencias, es decir, sumergirse en ella. Muchos se ahogan al intentar alcanzarla otros logramos salir victoriosos. Sin embargo, esto es sólo el comienzo, aún queda más terreno en el
cual sumergirse y luchar.
Arnold Alfonso
5
Contenido
Contenido ............................................................................................................................................ 5
1. FASE DE PLANEACIÓN, DEFINICIÓN Y ORGANIZACIÓN ............................................................... 8
1.1 TÍTULO: ................................................................................................................................ 8
1.2 TEMA: .................................................................................................................................. 8
1.3 PLANTEAMIENTO DEL PROBLEMA ............................................................................................ 8
1.3.1 Descripción ......................................................................................................................... 8
1.3.2 Formulación ........................................................................................................................ 9
1.4 JUSTIFICACIÓN .......................................................................................................................... 9
1.5 OBJETIVOS ............................................................................................................................... 10
1.5.1 Objetivo General .............................................................................................................. 10
1.5.2 Objetivos Específicos ........................................................................................................ 10
1.6 ALCANCES Y DELIMITACIONES ................................................................................................ 11
1.6.1 Alcances ............................................................................................................................ 11
1.6.2 Delimitaciones .................................................................................................................. 11
1.7 MARCO DE REFERENCIA .......................................................................................................... 12
1.7.1 Marco Histórico ................................................................................................................ 12
1.7.2 Marco Teórico ...................................................................................................................... 15
1.7.2.1 El Sistema Braille ........................................................................................................... 15
1.7.2.2 Metodología de desarrollo de software........................................................................ 21
1.7.2.3 Clasificación Metodologías de desarrollo de software ................................................ 22
1.7.2.4 Aplicación Móvil .......................................................................................................... 24
1.7.3 Marco Conceptual ................................................................................................................ 25
Android ...................................................................................................................................... 25
MÓVIL ........................................................................................................................................ 26
Telefonía móvil .......................................................................................................................... 26
Dispositivos Móviles .................................................................................................................. 26
Entorno De Desarrollo Integrado (IDE) ..................................................................................... 26
1.8 MARCO METODOLÓGICO ........................................................................................................ 27
Metodología XP ............................................................................................................................. 27
Definición .................................................................................................................................. 27
Historias de Usuario .................................................................................................................. 27
6
Principales Características ......................................................................................................... 28
Fases de la Programación Extrema ............................................................................................... 28
Exploración ................................................................................................................................ 28
Planificación de la Entrega (Release) ........................................................................................ 29
Iteraciones ................................................................................................................................. 29
Producción................................................................................................................................. 30
Mantenimiento ......................................................................................................................... 30
Muerte del Proyecto ................................................................................................................. 30
Bliseo ......................................................................................................................................... 31
1.9 FACTIBILIDAD .......................................................................................................................... 31
1.9.1 Técnica .............................................................................................................................. 31
Smartphone: .............................................................................................................................. 33
1.9.2 Operativa .......................................................................................................................... 33
1.9.3 Legal ................................................................................................................................. 33
1.9.4 Económica ........................................................................................................................ 35
1.10 CRONOGRAMA ...................................................................................................................... 36
2. ANÁLISIS .................................................................................................................................... 38
2.1 Consulta a fuentes de información apropiadas e identificación de problemas................ 38
2.2 Análisis de alternativas de solución .................................................................................. 38
2.3 Establecimiento del papel del computador ...................................................................... 39
2.4 Selección de la Herramienta de Programación ................................................................. 40
3. DISEÑO ...................................................................................................................................... 42
3.1 Entorno Para El Diseño Del MEC ....................................................................................... 42
3.2 Diseño De La Aplicación .................................................................................................... 43
Alcance: ......................................................................................................................................... 43
3.3 Diseño De La Interfaz ........................................................................................................ 44
3.4 Diseño Computacional ...................................................................................................... 45
Diagrama de Caso de Uso ............................................................................................................. 45
3.5 Preparación Y Evaluación Del Prototipo............................................................................ 46
4. FASE DE IMPLEMENTACIÓN ...................................................................................................... 46
TARJETAS CRC (Clase - Responsabilidad – Colaborador)............................................................... 46
5. Fase de Prueba Piloto ................................................................................................................ 53
Resultados obtenidos: ................................................................................................................... 56
7
9. Fase De Implantación ................................................................................................................ 63
10. Metodología .......................................................................................................................... 63
10.1 Exploración: ....................................................................................................................... 63
10.2 Planificación de La entrega: .............................................................................................. 64
10.3 Iteraciones: ........................................................................................................................ 65
10.4 Producción: ....................................................................................................................... 67
10.5 Mantenimiento: ................................................................................................................ 69
7.6 Muerte Del Proyecto: .............................................................................................................. 71
Roles: ............................................................................................................................................. 71
PRUEBAS DE ACEPTACIÓN ............................................................................................................ 72
Conclusiones ..................................................................................................................................... 78
Recomendaciones ............................................................................................................................. 78
BIBLIOGRAFÍA .................................................................................................................................... 80
INFOGRAFÍA....................................................................................................................................... 82
8
1. FASE DE PLANEACIÓN, DEFINICIÓN Y ORGANIZACIÓN
1.1 TÍTULO: Aplicación móvil para el aprendizaje del Lenguaje Braille y la
Signografía Básica usada en las áreas de matemáticas y música en personas
videntes.
1.2 TEMA: Enseñanza del lenguaje Braille y la Signografía básica usada para las
áreas de matemáticas y música.
1.3 PLANTEAMIENTO DEL PROBLEMA
1.3.1 Descripción
La discapacidad visual en la primera infancia es una consecuencia de las
malformaciones, deficiencias biológicas, accidentes fortuitos de la vida u
otros factores. Por ende, el desarrollo de los niños invidentes depende de
las condiciones históricas, culturales, sociales y políticas del país en el cual
nacen. Respecto a la inclusión educativa de los niños y las niñas con
discapacidad visual entre los 5 y 11 años, según el Sistema de Información
de Matrículas SIMAT en el año 2011, estaban matriculados 3.425 niños,
de los cuales 3.042 tienen baja visión y 383 son ciegos. No obstante, la
información del registro de discapacidad muestra que el 41.6% de los niños
en este rango de edad siguen excluidos de la educación regular.1
Por lo tanto, los niños invidentes carecen de oportunidades significativas a
nivel educativo ya que acceder a la educación no garantiza un pleno
desarrollo de sus actividades, puesto que, como lo evidencia Deam Lermer,
catedrático del Externado y exdirector del Instituto Nacional de Ciegos. Sólo
el 2% de los colegios en Colombia tiene material de estudio para niños
invidentes y no todos los docentes están capacitados para atender a esta
población2.
De esta manera, se puede evidenciar que existe un abandono a esta
población y los colegios que no son especializados en atender a personas
con discapacidad visual no pueden ofrecer una educación con la que los
menores puedan desarrollar sus habilidades de forma adecuada.
1 Niños y niñas con discapacidad visual en Colombia. Disponible en internet:<
http://www.mineducacion.gov.co/cvn/1665/w3-article-303293.html > [con acceso el 30-08-2015 ] 2 Invidentes afectados por derechos de autor. Disponible en internet:< http://www.elespectador.com/dean-lermer/invidentes-afectados-derechos-de-autor-articulo-366637 > [con acceso el 29-08-2015 ]
9
1.3.2 Formulación
¿La existencia de una herramienta que facilite la enseñanza y
acompañamiento de los docentes de los niños con discapacidad visual
ayudará a mitigar la falta de concentración, Retraimiento y frustración que
se manifiesta en los menores respecto al desempeño académico?
1.4 JUSTIFICACIÓN
Sólo el 2% de los colegios en Colombia tiene material de estudio para niños
invidentes lo que impide su desarrollo integral. Además, si un niño con
discapacidad visual se educa un ambiente donde sus allegados conozcan el
lenguaje Braille lo motivará a mejorar sus habilidades en lectoescritura evitando
que se aísle, pierda interés o sienta frustración durante su proceso académico.3
Por otra parte, podemos evidenciar con algunos proyectos similares realizados
que las herramientas tecnológicas motivan al niño a obtener más conocimiento
como es el caso del dispositivos IRIS®4 que permite a estudiantes en situación de
discapacidad visual la posibilidad de percibir “figuras y colores” usando las manos,
el muñeco Braillin5 Un elemento que permite el aprendizaje de lectoescritura del
Sistema Braille, apoyándose en la lúdica y los sentidos, dirigido tanto a la
población vidente como a la invidente. El dispositivo IRIS® se implementó en el
Instituto para Niños Ciegos Fundación Juan Antonio Pardo Ospina en Bogotá.
La difusión y conocimiento del sistema braille entre las personas que ven, así
como unas pautas básicas en la relación con personas con discapacidad visual,
supone un elemento facilitador y de colaboración con ellas y, en consecuencia,
una contribución inestimable a su integración, inclusión y participación social.
La entidad que se encarga de garantizar el derecho a la educación en Colombia
es el congreso de la República, la cual ha realizado varias leyes para garantizar el
derecho a la educación inclusiva y acceso a las tecnologías de información a las
personas con discapacidad visual, de las cuales podemos poner como ejemplo la
ley 1680 de Noviembre 20 de 2013 “por la cual se garantiza a las personas ciegas
3 Dificultades de aprendizaje en el alumnado con déficit visual y ciego. Disponible en internet:<
http://www.foal.es/sites/default/files/docs/4_dificultad_de_aprendizaje_0.pdf > [con acceso el 15-09-2015 ]
4 IRIS en Colombia. Disponible en internet:< http://www.duto.org/proyectos/iris_en_colombia/ > [con acceso el 07-09-2015 ]
5 Guía didáctica para uso de Braillín. Disponible en internet:
< http://www.juntadeandalucia.es/averroes/caidv/interedvisual/ftp/guia_didactica_uso_braillin.doc > [con acceso el 07-09-2015 ]
10
y con baja visión, el acceso a la información, a las comunicaciones, al
conocimiento y a las tecnologías de la información y de las comunicaciones"6 y la
ley 1618 del 27 de Febrero de 2013 "por medio de la cual se establecen las
disposiciones para garantizar el pleno ejercicio de los derechos de las personas
con discapacidad".7
Sin embargo, no existe mucho material o personal calificado para impartir clases
de música en lenguaje braille lo que le impide a una persona invidente tener una
buena formación en esta área8 y en las clases de matemáticas se debe recurrir a
material improvisado para enseñar fórmulas matemáticas.9
1.5 OBJETIVOS
1.5.1 Objetivo General
Desarrollar una aplicación móvil mediante la plataforma Android v 4.4 que
permita a los docentes y familiares de personas invidentes, aprender el
lenguaje Braille y la Signografía básica usada en las áreas de matemáticas
y música.
1.5.2 Objetivos Específicos
Realizar una investigación en el centro integral José María Córdoba, que
admite a niños con limitación visual, para Identificar los principales
problemas que tienen los docentes y personas cercanas a los niños con
esta limitación para aprender el lenguaje Braille.
Diseñar una aplicación móvil como solución preliminar para realizar las
respectivas mejoras y determinar problemas.
Instaurar un Módulo de transcripción Braille a la aplicación
Establecer un Glosario de Signos por cada una de las temáticas a tratar:
Notas musicales, Figuras musicales, Números, símbolos usados en las
matemáticas.
Generar un Módulo de evaluación para analizar el avance del usuario en el
aprendizaje del lenguaje Braille.
6 Congreso de Colombia, ley no. 1680. Disponible en internet:< http://www.mintic.gov.co/portal/604/articles-
5006_documento.pdf > [con acceso el 27-09-2015 ] 7 Congreso de Colombia, ley estatutaria no. 1618. Disponible en internet:<
http://wsp.presidencia.gov.co/Normativa/Leyes/Documents/2013/LEY%201618%20DEL%2027%20DE%20FEBRERO%20DE%202013.pdf > [con acceso el 27-09-2015 ]
8 La educación musical de personas con deficiencia visual y la musicografía braille. Disponible en internet:<
http://www.saccom.org.ar/2010_reunion9/actas/11.Bertevelli.pdf > [con acceso el 15-09-2015 ]
9 Matemáticas para invidentes. . Disponible en internet:< http://discapacidadcero.weebly.com/matematicas-para-no-
videntes.html#.VfkcDxF_NBc > [con acceso el 15-09-2015 ]
11
Efectuar pruebas al software una vez terminado para comprobar que
cumpla con las expectativas esperadas y detectar posibles problemas.
1.6 ALCANCES Y DELIMITACIONES
1.6.1 Alcances
Este proyecto se realizará para generar y desarrollar una aplicación que
permita a los docentes o personas cercanas a niños invidentes aprender
el lenguaje Braille de una forma sencilla. A su vez, el usuario también
tendrá la posibilidad de aprender la Signografía básica que se utiliza en
las áreas de música y matemáticas para que puedan acompañar al
menor en su proceso de aprendizaje.
1.6.2 Delimitaciones
1.6.2.1 Geográfica
El área geográfica seleccionada para el desarrollo del proyecto, es el
Centro Integral José María Córdoba ubicado en la localidad de
Tunjuelito, en el barrio el Tunal.
1.6.2.2 Temporal
El proyecto se realizará en un periodo de 6 meses, comprendido desde Noviembre de 2015 hasta Abril de 2016
1.6.2.3 Temática
Este proyecto abordará el aprendizaje del lenguaje Braille, el desarrollo de aplicaciones móviles y la Signografía que se usa en las áreas de matemáticas y música.
1.6.2.4 Técnica
Para realizar este proyecto se usará un computador proporcionado por el ejecutante que cuenta con el IDE de Eclipse ya que este fue el primer entorno que se utilizó para crear aplicaciones Android, y por lo tanto es el más extendido.10 La versión de Android que se va a usar es KitKat 4.4.
10 MONTERO, Miguel. Android Desarrollo De Aplicaciones. Primera Edición. Editorial Ra-ma. p. 27
12
1.7 MARCO DE REFERENCIA
1.7.1 Marco Histórico
Población con discapacidad en Colombia11
De acuerdo a las encuestas realizadas por el Censo Nacional De Población DANE en el 2005 las personas con discapacidad son 6.19 por cada 100 habitantes con un total de 2.549.153 casos detectados en esa fecha. Se identificó que las frecuencias más altas se presentaron en Bogotá, Antioquia y Valle del Cauca en ese orden.
Como proporción de las personas con limitaciones el mayor grupo para la fecha fue el de limitaciones visuales con un 36.3%. Las limitaciones para caminar ocuparon un segundo lugar con 24.7%. Es importante señalar que las limitaciones auditivas tiene un menor peso en cuanto a la principal limitación de las personas pero como en un mayor número de casos está asociado a otro tipo de discapacidad.
Educación personas Discapacitadas en Colombia12
En el año 2008, sólo el 0.4% de los alumnos matriculados en secundaria media tenían alguna discapacidad, pero en la secundaria básica este porcentaje era de 0.7% lo que implicó que había una tendencia importante en el abandono de los estudios por parte de los jóvenes con alguna discapacidad a su paso hacia la educación secundaria media.
Los mayores porcentajes de deserción de estudio para la fecha se tuvieron en Caldas, Chocó y Antioquia, departamentos donde el porcentaje de alumnos con discapacidad en media decreció con mayor proporción frente al porcentaje en secundaría básica.
Por otro lado, de acuerdo con el SIMAT en el año 2011 el 41.6% de niños con discapacidad visual entre los 5 y 11 años estaban excluidos de la educación regular. De esta manera es evidente que la población discapacitada tiene un gran problema al acceder a la educación tanto así que terminan dejando sus estudios por no poder entrar a sitios especializados al ser excluidos de la educación regular.
11 Sarmiento, Alfredo .Situación Educación. Tercera Edición. Observatorio de Educación de Uninorte. p.64-73 12 Ibid
13
Desarrollo Aplicaciones Móviles en Colombia13
Desde los últimos cuatro años, Colombia ha tenido una industria de contenidos digitales y aplicaciones cada vez más sólida y mejor estructurada. El 32% de los desarrolladores tiene por objetivo crear videojuegos, el 31% animación digital, 12% diseña eBooks y el 25% restante proyectos con impacto social para la base del país.
En cuanto a la regionalización de las empresas, 69% pertenecen a Bogotá, el 13% a Medellín, 6% Cali, 3% Manizales, 2% Bucaramanga y 2% Barranquilla.
Proyectos de Investigación en Desarrollo y terminados
Dispositivo tecnológico para la optimización del tiempo de aprendizaje del lenguaje Braille en personas invidentes14
Integrantes: Cesar Hernández, Luis F. Pedraza y Danilo López
Descripción:
Un prototipo electrónico, con el fin de mejorar los tiempos de aprendizaje inicial de la escritura Braille en personas con situación de discapacidad visual especialmente en niños. El desarrollo de ese proyecto, se basó en un prototipo electrónico digital, el cual después de realizar la escritura por parte del usuario, identifica y hace una traducción del Braille por medio de un sistema de síntesis de voz que genera las palabras de manera artificial con el objeto de verificar si la escritura en Braille es o no correcta. Para medir los tiempos de aprendizaje se contó con la colaboración de los docentes de la Biblioteca El Tunal y el INCI, a través de reuniones periódicas prácticas.
El aporte que se puede tomar de este proyecto es el proceso de aprendizaje en Braille, ya que puede mejorar el aprendizaje en la aplicación que se desea elaborar.
Proyectos Relacionados
A B Sé! Sistema para el aprendizaje de Lectoescritura en Braille15
Integrantes: Silvia Castañeda Meziat y Ernesto Maldonado Camargo.
13 Aplicaciones móviles colombianas con calidad de exportación. Disponible en internet:< http://www.mintic.gov.co/portal/604/w3-article-8396.html > [con acceso el 20-10-2015 ] 14 Dispositivo tecnológico para la optimización del tiempo de aprendizaje del lenguaje Braille en personas invidentes.
Disponible en internet:< http://www.scielosp.org/pdf/rsap/v13n5/v13n5a15.pdf > [con acceso el 07-09-2015 ]
15 A B Sé! Sistema para el aprendizaje de Lectoescritura en Braille. Disponible en internet:<
http://repository.javeriana.edu.co/bitstream/10554/4234/1/tesis97.pdf> [con acceso el 07-09-2015 ]
14
Descripción:
Elemento que permite el aprendizaje de lectoescritura del Sistema Braille, apoyándose en la lúdica y los sentidos, dirigido tanto a la población vidente como a la invidente. Se implementó en el Instituto para Niños Ciegos Fundación Juan Antonio Pardo Ospina en Bogotá. Se comprobó si la forma y dimensiones del A B Sé! eran las adecuadas, al igual que los agarres y alcances tanto máximos como mínimos. Se ve que el A B Sé! tiene un tamaño que permite su fácil manipulación por parte de los niños; El tamaño de los botones permite que los niños los presionen utilizando la palma de la mano, los dedos o la punta de un solo dedo. Los niños expresaron agrado por la forma del A B Sé!
Al ser un dispositivo que puede usar personas videntes e invidentes por igual, se puede plantear que la interfaz de la aplicación tenga alguna similitud en su diseño para que las personas videntes que la van a usar se puedan asociar fácilmente con el lenguaje.
BrailleSoft: Software traductor de lenguaje Braille a digital y viceversa16 Integrantes: Edith Johana Espitia Riaño y Gonzalo Gutiérrez López Descripción: Herramienta, en software libre y código abierto, que tomando documentos impresos en Braille Simple (una sola cara previamente escaneado) y por medio de un algoritmo matemático, interpreta las imágenes generadas traduciéndolas a texto digital en lenguaje español, con un margen de error del 5%, este texto digital, puede ser exportado a un archivo de texto. Por otra parte, la herramienta cuenta con la función de pasar el texto que ha sido traducido a formato de voz, para que el usuario pueda escuchar la traducción. A su vez la herramienta permite, que a partir de un texto en formato digital en lenguaje español, realice la traducción a lenguaje de comunicación Braille, con un margen de error del 2% El aporte destacable de este proyecto es el algoritmo que se usó para traducir del lenguaje Braille al lenguaje español, para tenerlo en cuenta a la hora de implementar el módulo de transcripción que tendrá la aplicación.
16 BrailleSoft: Software traductor de lenguaje Braille a digital y viceversa. Disponible en internet:<
http://reposital.cuaed.unam.mx:8080/jspui/bitstream/123456789/3774/1/VE13.295.pdf> [con acceso el 07-09-2015 ]
15
1.7.2 Marco Teórico
1.7.2.1 El Sistema Braille17
Historia
Desde la antigüedad hubo diversos inventos para facilitar la lectura y escritura a las personas sin visión (letras de madera, letras en relieve, regletas y pautas, nudos de distinto grosor en una cuerda, etc.), pero su utilización fue poco extendida por las deficiencias intrínsecas de estos códigos o los materiales empleados. La ceguera se convertía, por tanto, en un obstáculo para el acceso a la comunicación escrita.
En la segunda mitad del siglo XVIII empieza a cambiar la actitud de la sociedad ante la discapacidad en general y la ceguera en particular. Concretamente, en 1784, en París, Valentin Haüy funda el primer centro educativo para personas ciegas «Institution National des Jeunes Aveugles». Allí utilizaban para leer el sistema de Haüy que consistía en la grabación en alto relieve de los caracteres que se utilizan en vista. Con este sistema las personas ciegas podían leer, aunque muy despacio, pero no podían escribir.
En 1821, Charles Barbier de la Serre (1767-1861), capitán de artillería, presenta en el centro educativo de Haüy un sistema puntiforme (escritura nocturna o sonografía) que inventó para que los soldados se enviaran mensajes en relieve, para poder ser leídos al tacto, en la oscuridad. Eran signos que representaban sonidos que se leían con las yemas de los dedos y que se podían escribir con una pauta y un punzón. Pero los signos resultaban demasiado grandes y no representaban la ortografía de las palabras, sino su sonido.
Louis Braille (1809-1852), estudiante ciego del instituto fundado por Haüy, analiza el sistema de Barbier y realiza varias modificaciones: reduce el tamaño de los signos e inventa un alfabeto. En 1827 se publica, finalmente, el código de lectoescritura para ciegos: el sistema braille. Además, Luis Braille adapta el sistema a las matemáticas, la música y las ciencias, y desarrolla un sistema de abreviaturas. Inventa también una pauta que permite la escritura.
Como curiosidad, es interesante saber que el título de la presentación del sistema braille es exactamente: «Procedimiento para la escritura de palabras, música y canto llano por medio de puntos para uso de los ciegos y arreglado por ellos». Intentaba, también, facilitar a las personas sin visión la lectura y escritura de partituras musicales (de hecho, Luis Braille era profesor de música).
17 Educación inclusiva: discapacidad visual módulo 5: el sistema braille. Disponible en internet:<
http://www.ite.educacion.es/formacion/materiales/129/cd/pdf/m5_dv.pdf> [con acceso el 15-09-2015 ]
16
El sistema braille no fue aceptado ni difundido fácilmente ya que suponía un cambio drástico con respecto a la tendencia anterior. Es en el año 1840 cuando se acepta oficialmente. En 1878, en el Congreso Internacional celebrado en París, se decide promoverlo como método universal al considerarlo el mejor sistema de lectoescritura para personas con ceguera, por su probada utilidad didáctica.
Estructura del Sistema
El sistema braille se adecua estructural y fisiológicamente a las características del sentido del tacto. Se adapta perfectamente a las terminaciones nerviosas de la yema de los dedos, y así los signos son transmitidos al cerebro, como una totalidad.
Este sistema está diseñado para ser utilizado a través del tacto, por medio de puntos en relieve. La unidad básica o signo generador es el cajetín o celdilla. En este espacio se sitúan los 6 puntos en relieve, distribuidos en dos columnas de tres puntos cada una. Esta celdilla o cajetín, mide aproximadamente unos 5 mm de alto por 2,5 mm de ancho. La distancia horizontal entre celdillas es de unos 6,30 milímetros y la vertical entre líneas es de 10,20 milímetros, aproximadamente. Estas medidas hacen que la información quepa dentro de la yema de un dedo.
Cada letra o signo se representa en un solo cajetín, en el que aparecen o no los 6 puntos en relieve, que son percibidos a través del tacto por las yemas de los dedos. En un texto en braille los cajetines no están presentes, siendo visibles sólo los puntos. Para identificar los puntos, se les atribuye un número del 1 al 6.
Figura 1. Signo Generador
17
Mediante las diferentes combinaciones de puntos en un mismo cajetín se pueden obtener 64 formas distintas de disposición de los puntos, incluyendo el cajetín en blanco, que se utiliza para separar las palabras. Como el número de posibilidades es limitado, por economía del sistema, un mismo signo braille puede significar cosas distintas, según el contexto donde lo utilicemos o si le antepongamos otro signo. Por esta razón, el braille es un sistema y no un simple alfabeto ya que, utilizando sus 64 combinaciones se han desarrollado distintos códigos: para matemáticas, ciencias, música, estenografía (braille abreviado), signografía específica para diferentes idiomas, etc.
En braille cada letra se representa con una combinación de puntos en relieve. Para dejar espacios en blanco entre palabras, se emplean también un espacio o cajetín en blanco. Al comenzar a escribir se dejan dos espacios en blanco (sangría) y, entre párrafo y párrafo, es conveniente dejar un renglón en blanco, igual que en tinta. Estos espacios son muy útiles para que el lector pueda localizar fácilmente el inicio de cada párrafo y, así, darle facilidades para ubicarse en el texto.
El código está diseñado de manera lógica, mediante series:
1º serie: se utilizan únicamente los cuatro puntos superiores (1, 2, 4, 5) y con ellos se forman las diez primeras letras del alfabeto
Figura 2. Primera Serie Del Lenguaje Braille
2º serie: se forma con los puntos de la primera serie, añadiéndoles el punto número 3 y, así, obtenemos las siguientes letras, a excepción de la letra ñ (conviene recordar aquí que Luis Braille era francés)
Figura 3. Segunda Serie Del Lenguaje Braille
18
3ª serie: se forma con los puntos de la serie 2ª, añadiendo el punto número 6:
Figura 4. Tercera Serie Del Lenguaje Braille
4ª serie: son los elementos de la 1ª serie, añadiendo el punto número 6. En esta serie se forman signos propios del francés, por lo que aquí sólo presentamos las letras que nos interesan en español:
Figura 5. Cuarta Serie Del Lenguaje Braille
5ª serie: son los signos de la primera serie, pero utilizando los puntos de la mitad inferior de la celdilla o cajetín. Así, conseguimos los signos de puntuación:
Figura 6. Quinta Serie Del Lenguaje Braille
19
Metodologías de la enseñanza del Lenguaje Braille
Cada método defiende su propio orden en la presentación de las letras. Sin embargo, podemos decir que lo más aconsejable es seguir, siempre que sea posible, el mismo método de aprendizaje de la lectoescritura en tinta establecido en el aula para el resto de los compañeros videntes del alumno con ceguera, ya que este es el caso de la mayoría de los alumnos con discapacidad visual.
Muchos métodos se basan en que el niño debe conocer previamente el espacio rectangular que ocupan los 6 puntos de la celdilla y su ubicación. Para ello, se pueden utilizar algunos materiales que reproducen la celdilla braille en grande y facilitan al niño el aprendizaje. Existen, por ejemplo, pizarras «macrobraille», con celdillas grandes en las que hay que insertar pivotes con los que el alumno se va familiarizando con los signos. No obstante, nos sirve cualquier material de desecho que tenga esta forma (hueveras de media docena, etc.).
A continuación se presentan los métodos más utilizados:
Alborada
Cartilla para el aprendizaje de la lectura. Presenta las letras en un orden bastante lógico, con frases de creciente complejidad. Aunque el contenido de las frases ha quedado algo desfasado, resulta un método fácil de utilizar y motivador para los alumnos adultos ya que, desde las primeras páginas, leen palabras y frases con significado. El orden de presentación de las letras tiene en cuenta la sencillez o complejidad de los signos: a, o, u, e, l, p, i, b, m, s, n, v, d, ñ, g, t, f, ll, r, c, y, j, q, h, z, x, ch, k, punto, signo de mayúscula, sílabas trabadas, á, é, ó, coma, punto y coma, dos puntos, guion, í, ú, ü, w, interrogación, admiración y signo de número.
Bliseo
Es un método para aprendizaje del sistema braille para adultos alfabetizados. Empieza profundizando en el conocimiento especial del signo generador y va introduciendo las letras de la primera serie (de la «a» a la «j»), para seguir con la siguiente serie, añadiendo el punto 3 (de la «k» a la «t», excepto la «ñ») y las 5 últimas letras, añadiendo el punto 6.
Pérgamo
Método de alfabetización para personas ciegas adultas. Realiza una presentación de letras pensada para evitar confusiones y facilitar la percepción en braille. Comienza el método con ejercicios para discriminar las posiciones de los puntos en el cajetín, independientemente de su significado. El orden de presentación de las letras es el siguiente: a, e, i, o, u, l, s, p, m, f, d, n, t, ñ, c, h, á, é, b, v, ll, y, r, í, ó, ú, g, j, z, mayúsculas, punto y coma. Al final, se introducen las letras que suelen aparecer menos: x, q, ch, k, w, ü. Después van apareciendo las sílabas trabadas (pl, cl, bl, dr, tr, etc.), el signo de número y signos de puntuación: guion, dos puntos, punto y coma, interrogación, admiración, comillas, paréntesis, etc.
Punto a punto
Se presenta en castellano y catalán. Consta de dos series de 5 y 4 tomos, respectivamente. La primera serie presenta un programa de prelectura y
20
preescritura y la segunda se dedica a la enseñanza del sistema braille propiamente dicho:
Primera serie: en los tres primeros tomos se ofrecen una serie de ejercicios de prelectura, para el reconocimiento de formas (cuadrado, círculo, triángulo, rectángulo) y tamaños, líneas horizontales y verticales, y seguimiento de líneas y orientación espacial con cuadrados, líneas y series de varios elementos (conjuntos de puntos), para proceder a su discriminación, aun sin darles un significado. En el cuarto tomo es cuando se inicia el aprendizaje del sistema braille: el signo generador, en grandes caracteres con el objetivo de ir disminuyendo el tamaño e ir reconociendo las diferentes posiciones y las primeras letras: a, b, l, e, o. También se comienza la preescritura. En el último tomo se hacen consideraciones metodológicas para el profesor.
Segunda serie: en los tres primeros tomos, se van presentando una a una todas las letras del alfabeto, se hacen ejercicios de reconocimiento táctil, identificación y discriminación, combinando con las letras ya sabidas, para pasar a la lectura de sílabas, palabras y frases. El orden de presentación de las letras es el siguiente: a, o, u, e, l, p, b, m, n, f, i, signo de mayúscula y punto, r, s, apóstrofe, t, ll, c, admiración, d, interrogación, g, j, á, í, ú, v, coma, x, h, q, punto y coma, ñ, z, dos puntos, é, ó, ü, t y k; (en la versión en catalán, se añaden las letras è, ò, ç, ï) El cuarto tomo está dedicado a los maestros, donde se les explica en qué consiste el método y cómo utilizarlo.
Se acompaña de dibujos en relieve para motivar al alumno y de ejercicios para reforzar la discriminación de las letras.
Tomillo
Es un método de iniciación a la lectura braille dirigido, especialmente, a la población infantil. Apoya la presentación de contenidos significativos, al mismo tiempo que respeta las peculiaridades de la exploración táctil. Además, se adecua a la edad a la que va dirigido, utilizándose palabras y frases cortas con sentido, con estructuras lingüísticas familiares para el niño. Se emplean materiales atractivos para estas edades, con representaciones en relieve. Además ofrece ejercicios. La secuencia de presentación de grafemas es: a, o, u, e, l, p, á, b, c, d, m, signo de mayúscula, punto, i, n v, ó, s g, t, f, r í, ll, j, z, ñ, é, h, y, ch, ú, q, rr, r, gu. Es decir, se presentan, en primer lugar, las letras que se perciben más fácilmente al tacto, las que no presentan dificultades fonéticas y se evita unir letras simétricas. Se van introduciendo desde el principio las vocales con tilde. Utilizan doble espacio para facilitar la lectura y el cambio de línea.
Como hemos ido analizando, existen diferentes factores que inciden en la capacidad lectora: la motivación, la cantidad de estímulos lectores que recibe el niño, la edad de comienzo de la lectura, el grado de desarrollo de las destrezas previas, la maduración del alumno, los apoyos que encuentra en el entorno y la
21
metodología empleada. En función de todas estas variables, debemos elegir el método a utilizar.
No obstante, para respetar la inclusión del niño en su centro educativo, se debería utilizar el método con el que se esté trabajando en el aula realizando las adaptaciones de material que fueran necesarias.
Braille para personas adultas
Un adulto que acaba de perder la visión necesita aprender un nuevo código de lectoescritura: el código braille. Para ello, deberá dominar las destrezas necesarias para acceder al sistema y tener las condiciones y capacidades necesarias para iniciar el aprendizaje, es decir:
Desarrollar destrezas manipulativas y táctiles (entrenar el sentido del tacto)
Adaptación psicológica a la nueva situación: evidentemente si la persona aún no tiene asumida su nueva situación puede sentirse muy bloqueado ante el aprendizaje del sistema por lo que podríamos provocar rechazo. En cambio, a otras personas les puede suponer un alivio descubrir que el aprendizaje del sistema les abre expectativas y posibilidades que creían perdidas. Siempre habrá que valorar la situación entre los distintos profesionales y el alumno.
No parece adecuado enseñar el sistema braille a una persona ciega adulta con la misma metodología que se enseña a un niño. El adulto, en primer lugar, debe adaptarse a su nueva situación. Además, hay que tener en cuenta que va a tener menor facilidad para discriminar táctilmente las letras, ya que no tiene desarrollada la percepción táctil.
La enseñanza del braille a las personas adultas debe formar parte de un programa de rehabilitación individual.
Se debe evitar que el alumno llegue a rechazar el sistema a causa de las dificultades con la discriminación. Incluso, hay autores que defienden la posibilidad de representar el sistema con tablillas que representen las celdillas a mayor tamaño.
Si la persona aún conserva un buen resto visual puede ser aconsejable, en un primer momento, aprender el sistema braille utilizando la vista. Hay investigaciones que afirman que, de esta forma, es más fácil, después, acceder al braille a través del tacto.
1.7.2.2 Metodología de desarrollo de software18
Las metodologías de desarrollo de software son un conjunto de procedimientos, técnicas y ayudas a la documentación para el desarrollo de productos software.
18 Capítulo 2. IAGP 2005/06. Metodologías de desarrollo de software. Disponible en internet:<
http://www.um.es/docencia/barzana/IAGP/Iagp2.html> [con acceso el 20-10-2015 ]
22
Es como un libro de recetas de cocina, en el que se van indicando paso a paso todas las actividades a realizar para lograr el producto informático deseado, indicando además qué personas deben participar en el desarrollo de las actividades y qué papel deben de tener. Además detallan la información que se debe producir como resultado de una actividad y la información necesaria para comenzarla.
Actualmente es imprescindible considerar los riesgos, aunque habitualmente las empresas, no han sido concienciadas de los riesgos inherentes al procesamiento de la información mediante ordenadores, a lo que han contribuido, a veces, los propios responsables de informática, que no han sabido explicar con la suficiente claridad las consecuencias de una política de seguridad insuficiente o incluso inexistente. Por otro lado, debido a una cierta deformación profesional en la aplicación de los criterios de coste/beneficio, el directivo desconocedor de la informática no acostumbra a autorizar inversiones que no lleven implícito un beneficio demostrable, tangible y mensurable.
Las técnicas indican cómo debe ser realizada una actividad técnica determinada identificada en la metodología. Combina el empleo de unos modelos o representaciones gráficas junto con el empleo de unos procedimientos detallados. Se debe tener en consideración que una técnica determinada puede ser utilizada en una o más actividades de la metodología de desarrollo de software. Además se debe tener mucho cuidado cuando se quiere cambiar una técnica por otra.
1.7.2.3 Clasificación Metodologías de desarrollo de software19
Definición
Una metodología de desarrollo de software es un conjunto de pasos y procedimientos que deben seguirse para desarrollar software. Una metodología está compuesta por:
Cómo dividir un proyecto en etapas.
Qué tareas se llevan a cabo en cada etapa.
Qué restricciones deben aplicarse.
Qué técnicas y herramientas se emplean.
Cómo se controla y gestiona un proyecto.
Clasificación de las metodologías
Las metodologías se clasifican de la siguiente forma:
Estructuradas. Orientadas a procesos Orientadas a datos Mixtas
19 Metodologías de desarrollo de software. Disponible en internet:<
http://www2.rhernando.net/modules/tutorials/doc/ing/met_soft.html> [con acceso el 20-10-2015 ]
23
No estructuradas. Orientadas a objetos Sistemas de tiempo real
Metodologías estructuradas
Se basan en la forma top-down
Metodologías orientadas a procesos
La ingeniería del software se basa en el modelo básico de entrada/proceso/salida de un sistema.
Está compuesta por:
Diagrama de flujo de datos (DFD). Diccionario de datos. Especificaciones de proceso.
Metodologías orientadas a datos
Son metodologías basadas en la información. Primero se definen las estructuras de datos y, a partir de éstos, se derivan los componentes procedimentales.
Metodologías no estructuradas
Metodologías orientadas a objeto
La orientación a objetos unifica procesos y datos encapsulándolos en el concepto de objetos.
Tiene dos enfoques distintos:
Revolucionario, puro u ortodoxo. Rompen con las metodologías tradicionales.
Sintetista o evolutivo. Toman como base los sistemas estructurados y conforman elementos de uno y otro tipo.
Sistemas de tiempo real
Procesan información orientada al control más que a los datos.
Se caracterizan por concurrencia, priorización de procesos, comunicación entre tareas y acceso simultáneo a datos comunes.
24
1.7.2.4 Aplicación Móvil 20
Una Aplicación Móvil, es un conjunto de instrucciones lógicas, procedimientos, reglas, documentación, datos e información asociada a estas que funcionan específicamente en dispositivos móviles, como por ejemplo teléfonos inteligentes, televisores inteligentes, tabletas, reloj, entre otros.
Las aplicaciones móviles se desarrollan bajo diferentes lenguajes de programación y funcionan actualmente específicamente en sistemas operativos móviles, en estos momentos los lenguajes más usados para desarrollar aplicaciones móviles son: Java, Objetic C, Xcode C#, C++, WebOS, HTML5, Bad, XML, entre otros
Una aplicación móvil se identifica en la actualidad porque puede funcionar en dispositivos móviles como característica principal, sin embargo, dentro de las aplicaciones móviles existen unas características especiales que se nombraran a continuación:
La aplicación puede desarrollarse de forma nativa, quiere decir que se desarrolla en el lenguaje definido específicamente para el sistema operativo por la empresa u organización dueña del mismo, también se pueden desarrollar de forma hibrida es decir utilizando diferentes lenguajes de programación y herramientas, además se pueden desarrollar para el funcionamiento multiplataforma, es decir, para diferentes sistemas operativos, utilizando lenguajes como HTML 5.0, entre otros en los cuales podría funcionar en los diferentes sistemas operativos móviles.
Las aplicaciones móviles deben ser construidas teniendo el enfoque de la movilidad intrínseco en todo momento, una aplicación móvil no es una aplicación de escritorio o de servidor instalada en un dispositivo móvil, tampoco es una aplicación web funcionando en un dispositivo móvil, es una aplicación desarrollada específicamente para la tener una disponibilidad en todo momento y en todo lugar, debe estar en constante cambio de acuerdo a las necesidades de los usuarios y clientes en momentos específicos, debe movilizar procesos, soluciones, ayudas y apoyos necesarios, en general una aplicación móvil específicamente debe mejorar la experiencia del usuario, hacerle la vida más fácil sea cual sea la aplicación y el dispositivo móvil.
Algunas de las características que deben tener las aplicaciones móviles, ya sean aplicaciones de tipo empresarial, entretenimiento o de uso personal.
Funcionamiento en plataforma única o multiplataforma.
Eficiencia en el manejo de los recursos de hardware y software que se encuentren disponibles en el dispositivo móvil
Interfaz de manejo intuitivo, es decir que no sea complicado el uso de la interfaz de la aplicación.
20 Lección 2 ¿Que es una Aplicación Móvil?. Disponible en internet:<
http://datateca.unad.edu.co/contenidos/233016/EXE_SAM/leccin_2_que_es_una_aplicacin_mvil.html > [con acceso el 20-10-2015 ]
25
Utilizar estándares de programación en la construcción de la aplicación.
Generar una buena documentación de la aplicación.
Utilizar estrategias de seguridad en la aplicación para evitar fallos y problemas de inseguridad.
Encriptar los datos de los usuarios de la aplicación.
Utilizar comunicaciones seguras de la aplicación a los servicios web.
Definir perfiles, roles y procesos de autenticación de usuarios.
Utilizar contraseñas.
Cifrar los datos de la base de datos del dispositivo.
No almacenar datos sensibles en los dispositivos móviles.
Utilizar sistemas de recuperación y localización de dispositivos.
Para concluir lo que se debe trabajar en aplicaciones móviles son el desarrollo de aplicaciones de diferentes tipos empresariales, entrenamiento, educación, gubernamental, ciencia, entre muchas otras, teniendo mucha innovación, emprendimiento, reinvención.
Generar un ecosistema de negocio enfocado en el tema de la movilidad, teniendo en cuenta los contextos regionales, nacionales y mundiales, siendo incluyentes en todos los sentidos, es un mercado emergente que debe ser trabajado desarrollado y madurado.
1.7.3 Marco Conceptual21
Android
Android es un sistema operativo para dispositivos móviles como teléfonos inteligentes y tabletas basado en el núcleo Linux. Es desarrollado por la Open Handset Alliance, la cual es liderada por Google, usando diversos conjuntos de herramientas de software de código abierto para dispositivos moviles.
Fue construido para permitir a los desarrolladores la creación de aplicaciones móviles que aprovechan al máximo el uso de todas las herramientas que un dispositivo como este puede ofrecer.
Implementa una arquitectura en la que cualquier aplicación puede obtener acceso a las capacidades del teléfono móvil. Por ejemplo, una aplicación puede llamar una o varias de las funcionalidades básicas de los dispositivos móviles, tales como realizar llamadas, enviar mensajes de texto, o utilizar la cámara, facilitando a los
21 Sistema operativo Android: características y funcionalidad para dispositivos móviles. Disponible en internet:<
http://repositorio.utp.edu.co/dspace/bitstream/11059/2687/1/0053M722.pdfintegrado > [con acceso el 20-10-2015 ]
26
desarrolladores crear experiencias más ricas y con más coherencia para los usuarios.
Está construido sobre el kernel de Linux. Además, se utiliza una máquina personalizada virtual que fue diseñada para optimizarlos recursos de memoria y de hardware en un entorno móvil. Android es de código abierto, y además puede ser libremente ampliado para incorporar nuevas tecnologías de vanguardia que van surgiendo. La plataforma continuará evolucionando a medida que la comunidad de desarrolladores trabajando juntos puedan crear aplicaciones móviles innovadoras.
MÓVIL
Del latín mobilis, la noción de móvil permite el desarrollo de varios conceptos vinculados. En esencia, un móvil es aquello que puede moverse o que se mueve por sí mismo, que no tiene estabilidad o que mueve, ya sea de forma material o moral, algo.
Telefonía móvil
El teléfono móvil es un dispositivo inalámbrico electrónico que permite tener acceso a la red de telefonía celular o móvil. Se denomina celular en la mayoría de países latinoamericanos debido a que el servicio funciona mediante una red de celdas, donde cada antena repetidora de señal es una célula, si bien también existen redes telefónicas móviles satelitales. Su principal característica es su portabilidad, que permite comunicarse desde casi cualquier lugar. La principal función es la comunicación de voz, como el teléfono convencional.
Dispositivos Móviles
Los dispositivos móviles (también conocidos como computadora de mano, «Palmtop» o simplemente handheld) son aparatos de pequeño tamaño, con algunas capacidades de procesamiento, móviles o no, con conexión permanente o intermitente a una red, con memoria limitada, están diseñados para funciones específicas, pero que pueden llevar a cabo otras funciones más generales.
Entorno De Desarrollo Integrado (IDE)
Es un programa compuesto por un conjunto de herramientas para un programador. Puede dedicarse en exclusiva a un solo lenguaje de programación o bien, poder utilizarse para varios. Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica GUI. Los IDEs pueden ser aplicaciones por si solas o pueden ser parte de aplicaciones existentes. El leguaje Basic por ejemplo puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Basic en forma de macros para Word. Los IDEs proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, Java, C#, Basic, Object Pascal.
27
1.8 MARCO METODOLÓGICO
Metodología XP22
Se escogió esta metodología porque permite un desarrollo rápido e incremental. Además, se ejerce un constante contacto con el usuario esto implica que se pueda desarrollar un prototipo y según las historias del usuario se le puedan agregar mejoras al prototipo e identificar problemas.
Definición
La programación extrema es una metodología reciente (tiene alrededor de 5 años) en el desarrollo de software. La filosofía de X.P es satisfacer al completo las necesidades del cliente, por eso lo integra como una parte más del equipo de desarrollo.
X.P fue inicialmente creada para el desarrollo de aplicaciones dónde el cliente no sabe muy bien lo que quiere, lo que provoca un cambio constante en los requisitos que debe cumplir la aplicación. Por este motivo es necesaria una metodología ágil como X.P que se adapta a las necesidades del cliente y dónde la aplicación se va reevaluando en periodos cortos de tiempo.
X.P está diseñada para el desarrollo de aplicaciones que requieran un grupo de programadores pequeño, dónde la comunicación sea más factible que en grupos de desarrollo grandes. La comunicación es un punto importante y debe realizarse entre los programadores, los jefes de proyecto y los clientes.
Historias de Usuario23
Se trata de una lista de características que el cliente necesita que existan en el producto final. Estas constan de dos fases.
• En la primera fase, el cliente describe con sus propias palabras las características y, es el responsable del equipo, el encargado de informarlo de las dificultades técnicas de cada una de ellas y de su coste. A consecuencia de este diálogo, el cliente deja por escrito un conjunto de historias y las ordena en función de la prioridad que tiene para él. De esta manera ya es posible definir unas fechas aproximadas para ellos.
• En la segunda fase, el cliente cogerá las primeras historias a implementar y las dividirá en trabajos a realizar. El cliente también participa, pero hay más peso por parte del equipo de desarrolladores, esto dará como resultado una planificación más exacta. Este método se repetirá para cada historia.
A diferencia de otras técnicas, como puede ser UML, en el caso de XP, se exige que sea el cliente el encargado de escribir los documentos con las
22 Programación Extrema. Disponible en internet:< http://programacionextrema.tripod.com/index.htm > [con acceso el
20-10-2015 ] 23 Programación Extrema. Disponible en internet:< http://eisc.univalle.edu.co/materias/WWW/material/lecturas/xp.pdf>
[con acceso el 20-10-2015 ]
28
especificaciones de lo que realmente quiere, como un documento de requisitos de usuario.
En esta fase, el equipo técnico será el 'encargado de catalogar las historias del cliente y asignarles una duración. La norma es que cada historia de usuario tiene que poder ser realizable en un espacio entre una y tres semanas de programación. Las que requieran menos tiempo serán agrupadas, y las que necesiten más serán modificadas o divididas.
Finalmente decir que las historias de los usuarios serán escritas en tarjetas, lo que facilitará que el cliente pueda especificar la importancia relativa entre las diferentes historias de usuario, así como el trabajo de los programadores que podrán catalogarlas correctamente. Este formato también es muy útil en el momento de las pruebas de aceptación.
Principales Características
Comunicación: Los programadores están en constante comunicación con los clientes para satisfacer sus requisitos y responder rápidamente a los cambios de los mismos. Muchos problemas que surgen en los proyectos se deben a que después de concretar los requisitos que debe cumplir el programa, no hay una revisión de los mismos, pudiendo dejar olvidados puntos importantes.
Simplicidad: Codificación, diseños simples y claros. Muchos diseños son tan complicados que cuando se quieren ampliar resulta imposible hacerlo, por eso se tienen que desechar y partir de cero.
Realimentación (Feedback): Mediante la realimentación se ofrece al cliente la posibilidad de conseguir un sistema apto a sus necesidades ya que se le va mostrando el proyecto a tiempo para poder ser cambiado y poder retroceder a una fase anterior para rediseñarlo a su gusto.
Coraje: Se debe tener coraje o valentía para cumplir los tres puntos anteriores; Hay que tener valor para comunicarse con el cliente y enfatizar algunos puntos, a pesar de que esto pueda dar sensación de ignorancia por parte del programador, hay que tener coraje para mantener un diseño simple y no optar por el camino más fácil y por último hay que tener valor y confiar en que la realimentación sea efectiva
Fases de la Programación Extrema
Exploración
En esta fase, los clientes plantean a grandes rasgos las historias de usuario que son de interés para la primera entrega del producto. Al mismo tiempo el
29
equipo de desarrollo se familiariza con las herramientas, tecnologías y prácticas que se utilizarán en el proyecto. Se prueba la tecnología y se exploran las posibilidades de la arquitectura del sistema construyendo un prototipo. La fase de exploración toma de pocas semanas a pocos meses, dependiendo del tamaño y familiaridad que tengan los programadores con la tecnología.
Planificación de la Entrega (Release)
En esta fase el cliente establece la prioridad de cada historia de usuario, y correspondientemente, los programadores realizan una estimación del esfuerzo necesario de cada una de ellas. Se toman acuerdos sobre el contenido de la primera entrega y se determina un cronograma en conjunto con el cliente. Una entrega debería obtenerse en no más de tres meses. Esta fase dura unos pocos días. Las estimaciones de esfuerzo asociado a la implementación de las historias la establecen los programadores utilizando como medida el punto. Un punto, equivale a una semana ideal de programación. Las historias generalmente valen de 1 a 3 puntos. Por otra parte, el equipo de desarrollo mantiene un registro de la “velocidad” de desarrollo, establecida en puntos por iteración, basándose principalmente en la suma de puntos correspondientes a las historias de usuario que fueron terminadas en la última iteración. La planificación se puede realizar basándose en el tiempo o el alcance. La velocidad del proyecto es utilizada para establecer cuántas historias se pueden implementar antes de una fecha determinada o cuánto tiempo tomará implementar un conjunto de historias. Al planificar por tiempo, se multiplica el número de iteraciones por la velocidad del proyecto, determinándose cuántos puntos se pueden completar. Al planificar según alcance del sistema, se divide la suma de puntos de las historias de usuario seleccionadas entre la velocidad del proyecto, obteniendo el número de iteraciones necesarias para su implementación.
Iteraciones
Esta fase incluye varias iteraciones sobre el sistema antes de ser entregado. El Plan de Entrega está compuesto por iteraciones de no más de tres semanas. En la primera iteración se puede intentar establecer una arquitectura del sistema que pueda ser utilizada durante el resto del proyecto. Esto se logra escogiendo las historias que fuercen la creación de esta arquitectura, sin embargo, esto no siempre es posible ya que es el
30
cliente quien decide qué historias se implementarán en cada iteración (para maximizar el valor de negocio). Al final de la última iteración el sistema estará listo para entrar en producción. Los elementos que deben tomarse en cuenta durante la elaboración del Plan de la Iteración son: historias de usuario no abordadas, velocidad del proyecto, pruebas de aceptación no superadas en la iteración anterior y tareas no terminadas en la iteración anterior. Todo el trabajo de la iteración es expresado en tareas de programación, cada una de ellas es asignada a un programador como responsable, pero llevadas a cabo por parejas de programadores.
Producción
La fase de producción requiere de pruebas adicionales y revisiones de rendimiento antes de que el sistema sea trasladado al entorno del cliente. Al mismo tiempo, se deben tomar decisiones sobre la inclusión de nuevas características a la versión actual, debido a cambios durante esta fase. Es posible que se rebaje el tiempo que toma cada iteración, de tres a una semana. Las ideas que han sido propuestas y las sugerencias son documentadas para su posterior implementación (por ejemplo, durante la fase de mantenimiento).
Mantenimiento
Mientras la primera versión se encuentra en producción, el proyecto XP debe mantener el sistema en funcionamiento al mismo tiempo que desarrolla nuevas iteraciones. Para realizar esto se requiere de tareas de soporte para el cliente. De esta forma, la velocidad de desarrollo puede bajar después de la puesta del sistema en producción. La fase de mantenimiento puede requerir nuevo personal dentro del equipo y cambios en su estructura.
Muerte del Proyecto
Es cuando el cliente no tiene más historias para ser incluidas en el sistema. Esto requiere que se satisfagan las necesidades del cliente en otros aspectos como rendimiento y confiabilidad del sistema. Se genera la documentación final del sistema y no se realizan más cambios en la arquitectura. La muerte del proyecto también ocurre cuando el sistema no genera los beneficios esperados por el cliente o cuando no hay presupuesto para mantenerlo.
31
Bliseo24
Es un método para aprendizaje del sistema braille para adultos alfabetizados. Empieza profundizando en el conocimiento especial del signo generador y va introduciendo las letras de la primera serie (de la «a» a la «j»), para seguir con la siguiente serie, añadiendo el punto 3 (de la «k» a la «t», excepto la «ñ») y las 5 últimas letras, añadiendo el punto 6.
1.9 FACTIBILIDAD
1.9.1 Técnica
La solución técnica planteada involucra una serie de herramientas las cuales son:
Eclipse25: entorno de desarrollo integrado, de Código abierto y Multiplataforma. Mayoritariamente se utiliza para desarrollar lo que se conoce como "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-liviano" basadas en navegadores. Es una potente y completa plataforma de Programación, desarrollo y compilación de elementos tan variados como sitios web, programas en C++ o aplicaciones Java. No es más que un entorno de desarrollo integrado (IDE) en el que se pueden encontrar todas las herramientas y funciones necesarias para realizar el proyecto.
Ventajas en la utilización de Eclipse
1- El entorno de desarrollo integrado (IDE) de Eclipse emplea módulos (en inglés plug-in) para proporcionar toda su funcionalidad al frente de la Plataforma de Cliente rico, a diferencia de otros entornos monolíticos donde las funcionalidades están todas incluidas, las necesite el usuario o no.
2- Este mecanismo de módulos es una plataforma ligera para componentes de software. Adicionalmente a permitirle a Eclipse extenderse usando otros lenguajes de programación como son C/C++ y Python, permite a Eclipse trabajar con lenguajes para procesado de texto como LaTeX, aplicaciones en red como Telnet y Sistema de gestión de base de datos.
3-La arquitectura plug-in permite escribir cualquier extensión deseada en el ambiente, como sería Gestión de la configuración. Se provee soporte para Java y CVS en el SDK de Eclipse. Y no tiene por qué ser usado únicamente para soportar otrosLenguajes de programación.
4- La definición que da el proyecto Eclipse acerca de su Software es: "una especie de herramienta universal - un IDE abierto y extensible para todo y nada en particular".
24 Educación inclusiva: discapacidad visual módulo 5: el sistema braille. Disponible en internet:<
http://www.ite.educacion.es/formacion/materiales/129/cd/pdf/m5_dv.pdf> [con acceso el 15-09-2015 ] 25 Eclipse, entorno de desarrollo integrado. Disponible en internet:<
http://www.ecured.cu/index.php/Eclipse,_entorno_de_desarrollo_integrado > [con acceso el 20-10-2015 ]
32
En cuanto a la utilización de eclipse para la creación de aplicaciones clientes se puede decir que:
1- Eclipse provee al programador con Frameworks muy ricos para el desarrollo de aplicaciones gráficas, definición y manipulación de modelos de Software, Aplicaciones web, etc. Por ejemplo, GEF (Graphic Editing Framework - Framework para la edición gráfica) es un plug-in de Eclipse para el desarrollo de editores visuales que pueden ir desde procesadores de texto wysiwyg hasta editores de diagramas UML, interfaces gráficas para el usuario (GUI), etc. Dado que los editores realizados con GEF "viven" dentro de Eclipse, además de poder ser usados conjuntamente con otros plugins, hacen uso de su interfaz gráfica personalizable y profesional.
2- El SDK de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. Esto permite técnicas avanzadas de refactorización y análisis de código.
3- El IDE también hace uso de un espacio de trabajo, en este caso un grupo de metadata en un espacio para archivos plano, permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente.
Bases de Datos SQLite26: es un motor de bases de datos muy popular en la actualidad por ofrecer características tan interesantes como su pequeño tamaño, no necesitar servidor, precisar poca configuración, ser transaccional y por supuesto ser de código libre.
Android incorpora de serie todas las herramientas necesarias para la creación y gestión de bases de datos SQLite, y entre ellas una completa API para llevar a cabo de manera sencilla todas las tareas necesarias. Sin embargo, en este primer artículo sobre bases de datos en Android no vamos a entrar en mucho detalle con esta API. Por el momento nos limitaremos a ver el código necesario para crear una base de datos, insertaremos algún dato de prueba, y veremos cómo podemos comprobar que todo funciona correctamente.
En Android, la forma típica para crear, actualizar, y conectar con una base de datos SQLite será a través de una clase auxiliar llamada SQLiteOpenHelper, o para ser más exactos, de una clase propia que derive de ella y que debemos personalizar para adaptarnos a las necesidades concretas de nuestra aplicación.
La clase SQLiteOpenHelper tiene tan sólo un constructor, que normalmente no necesitaremos sobrescribir, y dos métodos abstractos, onCreate() y onUpgrade(), que deberemos personalizar con el código necesario para crear nuestra base de datos y para actualizar su estructura respectivamente.
26 Bases de Datos en Android (I): Primeros pasos. . Disponible en internet:< http://www.sgoliver.net/blog/bases-de-
datos-en-android-i-primeros-pasos/> [con acceso el 20-10-2015 ]
33
Smartphone: Es un teléfono inteligente que puede comunicarse a través de Wi-Fi, bluetooth, conexión a internet, envío de mensajería, y con e-mails. Generalmente se define como dispositivo electrónico de mano que integra la funcionalidad de un teléfono celular, PDA o similar. Opera añadiendo funciones de teléfono a un PDA existente o añadiendo funcionalidades "inteligentes", como las funciones del PDA, en un teléfono celular.
1.9.2 Operativa
El ejecutante del proyecto será un estudiante de la Universidad Distrital Francisco José de Caldas el cual cuenta con una serie de conocimientos y habilidades adquiridas a lo largo de su carrera, pero no son suficientes para llevar a cabo el proyecto, por lo tanto se contará con la asesoría del Ingeniero En Sistemas José Vicente Reyes Mozo que es profesor de la Facultad. También se debe contactar a un experto en el lenguaje Braille, por esta razón se cuenta con la asesoría de un tiflólogo, el INCI ofrece estas asesorías por un tiempo determinado.
1.9.3 Legal
En cuanto al marco legal del proyecto, el congreso de la República ha realizado
varias leyes para garantizar el derecho a la educación inclusiva y acceso a las
tecnologías de información a las personas con discapacidad visual, de las cuales
podemos poner como ejemplo la ley 1680 de Noviembre 20 de 2013 “por la cual
se garantiza a las personas ciegas y con baja visión, el acceso a la información, a
las comunicaciones, al conocimiento y a las tecnologías de la información y de las
comunicaciones"27 y la ley 1618 del 27 de Febrero de 2013 "por medio de la cual
se establecen las disposiciones para garantizar el pleno ejercicio de los derechos
de las personas con discapacidad".28
Por otra parte también existe la ley 1341 de julio de 2009 por la cual se “determina
el marco general para la formulación de las políticas públicas que regirán el sector
de las Tecnologías de la Información y las Comunicaciones, su ordenamiento
general, el régimen de competencia, la protección al usuario, así como lo
concerniente a la cobertura, la calidad del servicio, la promoción de la inversión en
el sector y el desarrollo de estas tecnologías, el uso eficiente de las redes y del
espectro radioeléctrico, así como las potestades del Estado en relación con la
planeación, la gestión, la administración adecuada y eficiente de los recursos,
regulación, control y vigilancia del mismo y facilitando el libre acceso y sin
27 Congreso de Colombia, ley no. 1680. Disponible en internet:< http://www.mintic.gov.co/portal/604/articles-
5006_documento.pdf > [con acceso el 27-09-2015 ]
28 Congreso de Colombia, ley estatutaria no. 1618. Disponible en internet:<
http://wsp.presidencia.gov.co/Normativa/Leyes/Documents/2013/LEY%201618%20DEL%2027%20DE%20FEBRERO%20DE%202013.pdf > [con acceso el 27-09-2015 ]
34
discriminación de los habitantes del territorio nacional a la Sociedad de la
Información.”29
En cuanto a la protección del software, o programas de ordenador, de acuerdo con la Decisión Andina 351 de 1993 “la siguiente decisión tiene por finalidad reconocer una adecuada y efectiva protección a los autores y demás titulares de derechos, sobre las obras de ingenio, en el campo literario, artístico o científico, cualquiera quesea el género o forma de expresión y sin importar el mérito literario o artístico ni su destino”.30
En cuanto a las licencias de Software se utilizará la Licencia Pública General Affero que está basada en la GPL de GNU, pero contiene una cláusula adicional que permite a los usuarios interactuar con el programa licenciado a través de una red para recibir el código fuente de ese programa.31
29 Congreso de Colombia, ley no. 1341. Disponible en internet:< http://www.mintic.gov.co/portal/604/articles-
3707_documento.pdf > [con acceso el 20-10-2015 ] 30 Decisión Andina 351 de 1993 Régimen Común sobre derecho de autor y derechos conexos. Disponible en
internet:< http://www.egeda.com.pe/documentos/Decision_351.pdf> [con acceso el 20-10-2015 ] 31 El sistema Operativo GNU. Disponible en internet:< http://www.gnu.org/licenses/licenses.es.html > [con acceso el 20-10-2015 ]
35
1.9.4 Económica
A continuación se dará a conocer la estimación de la factibilidad económica
estimada como se muestra en la siguiente tabla.
Tabla 1. Factibilidad Económica Estimada
Descripción Valor
Hardware Computador: 400 Horas de Internet *($1.000 Pesos c/u) $ 400.000,00
Celular: 70 Horas de uso*(1.200 Pesos c/u) $ 84.000,00
Software Licencia Pública Eclipse (EPL) Licencia Dominio público SQLite Licencia GNU GPL Android
$ 0,00 $ 0,00 $ 0,00
Humano Ejecutante 1: 500 Horas trabajadas *(10,000 día) $ 5.000.000,00
Tiflólogo: 48 Horas trabajadas *(50,000 día) $ 2.400.000,00
Tutor: 48 Horas trabajadas *(30,000 día) $ 1.440.000,00
Otros Libros Desplazamiento, Pruebas
$ 350.000,00 $ 81.000,00
Total $ 9.755.000,00
36
1.10 CRONOGRAMA
1a Fase: Exploración.
Recolección Historias de Usuario.
Recolección de Información
Construcción de Prototipo
2a Fase: Planificación de la Entrega.
Lista inicial de clases
Modelo de interfaz
Modelo lógico
Modelo físico
3ª Fase: Iteraciones.
Elección Historias de Usuario
4ª Fase: Producción.
Realizar Pruebas al Software
Incluir Nuevas características
5ª Fase: Mantenimiento.
Dar Soporte al Usuario
Nuevas Iteraciones
6ª Fase: Muerte del Proyecto.
Comprobar que se satisfacen las necesidades del usuario.
37
1.10.1 Cronograma de Actividades
38
2. ANÁLISIS
2.1 Consulta a fuentes de información apropiadas e identificación de
problemas32
Para empezar, se debe definir el concepto de educación inclusiva el cual
consiste en atender con calidad y equidad las necesidades comunes y
específicas que presentan los estudiantes, y para lograrlo se requiere
desarrollar estrategias organizativas que ofrezcan respuestas eficaces para
abordar la diversidad, implementar formas de enseñanza flexibles e
innovadoras que permitan dar una educación personalizada a estudiantes en
estado de discapacidad o con talentos excepcionales.
Para el tema que nos atañe, las políticas internacionales exigen que las
instituciones educativas se adecuen para hacer efectivos los derechos a la
educación, la participación y la igualdad para todos los niños, niñas, jóvenes y
adultos con discapacidad, los colegios públicos como privados tienen la
obligatoriedad de recibirlos en sus planteles, pero en la mayoría de los casos
los docentes no tienen los conocimientos necesarios para atender a
estudiantes en estado de discapacidad.
Por otra parte, los menores con discapacidad visual tienen temor a no ser
aceptados cuando ingresan en un centro educativo donde la mayoría de sus
compañeros no tienen este tipo de discapacidad, lo cual repercute en su
comportamiento y aprendizaje.33 La educación inclusiva sugiere que todos los
estudiantes pueden aprender, siempre y cuando su entorno educativo ofrezca
condiciones de accesibilidad para todos y provea experiencias de aprendizaje
significativas para todos los actores que allí se encuentran. Lo que garantiza
que todos los niños y niñas de una comunidad determinada puedan estudiar
juntos.
2.2 Análisis de alternativas de solución
Como primera medida, se debe buscar la manera para que los docentes
puedan adquirir conocimientos en el lenguaje braille para poder garantizar que
el estudiante en estado de discapacidad reciba una educación personalizada,
los docentes recurren a un tiflólogo para que les ayuden a preparar material
para sus alumnos con discapacidad visual, lo que implica que se tengan
dificultades para cumplir con los tiempos establecidos para evaluar las
actividades.
32 Colombia avanza hacia una educación inclusiva con calidad (I). Disponible en Internet:<http://www.mineducacion.gov.co/cvn/1665/article-168443.html>[con acceso el 12-03-2016 ] 33 Dificultades de aprendizaje en el alumnado con déficit visual y ciego. Disponible en internet:<http://www.foal.es/sites/default/files/docs/4_dificultad_de_aprendizaje_0.pdf >[con acceso el 12-03-2016]
39
Como alternativa para solucionar este problema, la aplicación cuenta con un
módulo de aprendizaje del lenguaje braille para que el docente pueda adquirir
conocimientos y le sea más fácil enseñarle a su estudiante con discapacidad
visual. Además, se cuenta con el módulo de transcripción con el que se puede
facilitar al docente la elaboración de un material de estudio si no tiene mucho
tiempo para aprender el lenguaje braille.
Para tratar de reducir un poco el temor por parte del niño invidente a no ser
aceptado por sus compañeros, se plantea que la aplicación a desarrollar sea
usada también por sus compañeros para que aprendan el lenguaje braille y
puedan ayudar a su compañero con las lecciones que les son impartidas a
todos. Lo cual puede facilitar a que se forme un ambiente más favorable para
el niño invidente y provea experiencias de aprendizaje significativas, que es lo
que se busca con la educación inclusiva.
2.3 Establecimiento del papel del computador
Actualmente, la mayoría de población tiene acceso a dispositivos móviles ya
sea con fines recreativos, informativos o de carácter laboral, entre otros. El uso
de este tipo de dispositivos más que un lujo se ha convertido en una necesidad
por lo expuesto anteriormente, además este tipo de dispositivos facilitan el
acceso a la información con aplicativos que permiten acceder al aprendizaje de
otros idiomas o reforzar el conocimiento en ciertas áreas.
El dispositivo móvil tiene un papel muy importante en el problema que se
desea tratar y es el de permitir el acceso a información referente al lenguaje
braille en dos áreas específicas que son matemáticas y música. El docente o
una persona (vidente) que quiera aprender el lenguaje o acceder a este tipo de
información pueden usar la aplicación para aprender o realizar sus consultas
en el momento que lo desee para acompañar a un niño o persona invidente en
su proceso educativo.
Por otro lado, se busca que los compañeros de los niños invidentes con acceso
a un dispositivo móvil usen la aplicación y de esta manera se pueda realizar
una mayor interacción con el niño invidente, generando un ambiente de
estudio agradable, con lo que se evitará que el niño presente problemas de
conducta o aprendizaje.34
34 Dificultades de aprendizaje en el alumnado con déficit visual y ciego. Disponible en internet:<http://www.foal.es/sites/default/files/docs/4_dificultad_de_aprendizaje_0.pdf >[con acceso el 13-03-2016]
40
2.4 Selección de la Herramienta de Programación
A continuación se presenta un cuadro comparativo entre 4 lenguajes y/o
herramientas de programación describiendo sus principales características para
determinar cuál de ellas usar en el proyecto.
Tabla 2. Cuadro Comparativo Herramientas De Programación35
Lenguaje y/o Herramienta
Logo Características
LENGUAJE SELECCIONADO
JAVA
Este lenguaje está diseñado para la programación orientada a objetos.
Una plataforma estándar para el desarrollo de aplicaciones.
Abarca un gran tipo de dispositivos limitados no sólo teléfonos móviles
Se puede ahorrar demasiadas líneas de código
Se utiliza en el sistema operativo Android
Se ha convertido en una excelente opción para desarrollar juegos para móviles ya que se puede desarrollar desde un PC y luego ser pasado fácilmente al dispositivo móvil.
PYTHON
Es un lenguaje de programación fácil de aprender y potente.
Es un lenguaje de programación dinámico orientado a objetos que se puede utilizar para muchos tipos de desarrollo de software
Funciona en Windows, Linux / Unix, Mac OS X, OS / 2, computadoras de mano Palm y los teléfonos móviles de Nokia
Código 100% libre Es un lenguaje interpretado,
fuertemente tipado y multiplataforma.
35 CARATERISTÍCAS DE LENGUAJES DE PROGRAMACIÓN PARA DISPOSITIVOS MÓVILES. Disponible en internet: < https://www.xmind.net/m/33M9/> [con acceso el 13-03-2016 ]
41
HTML5
El objetivo de HTML5 no es solo para utilidad en la programación en los navegadores actuales, sino en la gran variedad de dispositivos móviles que hay en el mercado, tales como PDA, tablets, etc.
Se usa el lenguaje HTML5 web móvil para la creación de web móviles y aplicaciones móviles
Es una tecnología sin igual que funciona en las principales plataformas móviles (Phone, iPad, Android, Android Tablet, BlackBerry y Windows Phone 7) como una aplicación instalada y en navegadores móviles.
Tiene un soporte para la reproducción de vídeo sin necesidad de plugins.
Permite efectos visuales y animaciones más atractivas
APP INVENTOR
Es una aplicación
proporcionada por Google. Permite a cualquiera crear
aplicaciones de software para el sistema operativo Android.
Utiliza una interfaz gráfica muy sencilla, ya que permite a los/as usuarios/as arrastrar y soltar objetos visuales para crear una aplicación que pueda ejecutarse en los terminales cuyo sistema operativo sea Android.
No se limita únicamente a juegos , pues también es posible construir aplicaciones para educar
42
3. DISEÑO
3.1 Entorno Para El Diseño Del MEC
Destinatarios:
Esta aplicación está destinada a personas sin discapacidad visual como
docentes, personas que convivan con invidentes o interesados en aprender el
lenguaje braille para que apoyen a un menor con discapacidad visual en su
aprendizaje.
Área de contenido:
La aplicación contará con 4 módulos (Aprendizaje, Glosario, Transcripción y
Evaluación) dentro de estos módulos se encuentra encapsulada la información
referente al lenguaje Braille y su aplicación en dos asignaturas (Música y
Matemáticas) lo que se busca es facilitar al docente u otro usuario acceder a
esta información para que pueda acompañar a un menor con discapacidad
visual en su proceso de aprendizaje.
Necesidad educativa36:
Para el proceso de atención educativa de un alumno con discapacidad visual
se deben garantizar ciertos elementos básicos entre los cuales se pueden
encontrar:
Material didáctico adaptado: loterías, dominó, cajas de texturas, tamaños
y pesos, fichas y otros que sean fácilmente manipulables por él.
Material: Impreso en Braille y Macrotipo que puede ser solicitado en la
sede central del INCI.
Cuentos, libros y cartillas que deben ser adaptadas por los padres y
maestro de apoyo para ser utilizadas por el estudiante.
Impresoras Braille y Software de transcripción: Las características de
estos equipos y programas los hacen particularmente útiles, no solo en
relación con la lectoescritura sino como apoyo a todas las áreas.
De esta forma, la aplicación tiene como objetivo ser una herramienta para que
los docentes, padres o familiares de un menor con discapacidad visual puedan
crear material de apoyo al tener acceso al aprendizaje del idioma Braille.
Además, ya que la aplicación tendrá un módulo de transcripción esto facilitará
adaptar los cuentos u otros textos al lenguaje braille.
36 Orientaciones Pedagógicas para La Atención Educativa a Estudiantes con Limitación Visual ministerio De Educación
Nacional. Disponible en internet:<http://www.colombiaaprende.edu.co/html/micrositios/1752/articles-320691_archivo_2.pdf> [con acceso el 13-03-2016 ]
43
Limitaciones:
o El aplicativo es solo para dispositivos con sistema operativo Android. o La aplicación debe instalarse en el dispositivo, sea celular o Tablet. o El usuario debe tener algunos conocimientos musicales para
entender la parte del glosario dedicada a esta área.
o El módulo de transcripción sólo trabaja con texto, caracteres de tipo
numérico no están soportados.
Recursos para los usuarios:
La aplicación cuenta con menús elaborados con el componente ListView para
facilitar su navegación por la misma, cuando el usuario ingresa al módulo de
glosario puede escoger entre tres opciones (Alfabeto, Música Y Matemáticas)
que están ubicadas en un menú expandible para facilitar su comprensión, cada
opción tiene encapsulada información referente a un tema en específico lo cual
facilita encontrar la información que se desea. Aquí se puede encontrar
imágenes con la representación en Braille del signo o letra deseado.
Soporte lógico que se va a utilizar:
Para el desarrollo del aplicativo se trabajó con: Adroid Studio, SQLite (Base de
Datos), ListView para que el usuario se desplazara de manera más rápida por los
menús y ExpandableListView para encapsular la información referente a cada
asignatura por temas.
3.2 Diseño De La Aplicación
Alcance:
Este proyecto se centra en proporcionar información referente al sistema Braille, facilitar su aprendizaje a personas que lo deseen y ayudar a elaborar material de estudio para que sean usados por un estudiante invidente. En primer lugar se encuentra el módulo de glosario:
Se elabora un menú desplegable para acceder a tres opciones (Alfabeto, Música Y Matemáticas) cada opción tiene encapsulada temas referentes a cada una para facilitar el acceso a la información deseada.
Se desarrollan imágenes referentes a cada símbolo incluido en el glosario para facilitar su comprensión.
En segundo lugar se encuentra el módulo de evaluación:
Se desarrolla test en los que se evalúan los conocimientos adquiridos en el módulo de aprendizaje o según lo aprendido a través del glosario.
44
En tercer lugar se encuentre el módulo de Transcripción:
En este módulo el usuario puede transcribir el texto que digite en el campo asignado a lenguaje Braille.
Contenido: La aplicación está diseñada para que el usuario acceda al contenido disponible a través de tres módulos (Glosario, Evaluación, Transcripción) cada módulo le permite al usuario interactuar de manera diferente con la aplicación: Módulo de Glosario: En este módulo el usuario podrá acceder a toda la signografía disponible por la aplicación en los temas disponibles (Alfabeto, Música y Matemáticas) los cuales están subdivididos en categorías referentes a cada tema. Módulo de Evaluación: En este módulo se encuentran pruebas referentes a cada tema para evaluar el conocimiento que ha adquirido el usuario. Módulo de Transcripción: El módulo de transcripción cuenta con un campo de texto para que el usuario digite lo que deseé transcribir, una vez se presione el botón “transcribir” el texto digitado por el usuario aparecerá en lenguaje braille en un Listview.
3.3 Diseño De La Interfaz
Para que el usuario pueda usar la aplicación necesitará de un dispositivo móvil
(Smartphone o Tablet) que use el sistema operativo Android, para el menú
principal se utilizó el componente Listview para que el usuario pueda navegar
de una forma más sencilla por la aplicación, este menú también cuenta con
imágenes asociadas a cada opción para que sean más fáciles de identificar por
el usuario.
En el módulo se Glosario se cuenta con un ExpandableListView el cual permite
hacer una división más apropiada de la información que se encuentra en esta
sección, lo que evita usar otros elementos para encapsular la información en
categorías respecto al tema a tratar.
En el módulo de transcripción se cuenta con un campo de texto para que el
usuario digite la información que desea transcribir a Braille, una vez se realice
la transcripción se mostrará un grupo de imágenes en un Listview
correspondiente a la transcripción del texto digitado anteriormente por el
usuario.
45
3.4 Diseño Computacional
Diagrama de Caso de Uso
Este diagrama permite ver cómo interactúa el usuario y la aplicación, dando más
detalle a la descripción textual de la descripción de la aplicación. Con base a este
diagrama se puede ver cuáles pueden ser las necesidades de información en cada
escenario de interacción y se puede establecer cuáles pueden ser los algoritmos
que serán usados.
Figura 8. Diagrama de Casos de Uso
46
3.5 Preparación Y Evaluación Del Prototipo
Para saber si los compañeros de los menores invidentes estaban interesados en
aprender el lenguaje Braille ya sea para ayudarlos a ellos, amigos o algún familiar
el ejecutor del proyecto desarrolló una encuesta en la cual se pregunta si les
gustaría aprender el lenguaje, si alguna vez han tomado clases y otras de la
misma índole. El test quedo definido con 10 preguntas de selección múltiple con
única respuesta.
4. FASE DE IMPLEMENTACIÓN
TARJETAS CRC (Clase - Responsabilidad – Colaborador).
Estas tarjetas se dividen en tres secciones que contienen la información del
nombre de la clase, sus responsabilidades y sus colaboradores.
Clase: Es cualquier persona, cosa, evento, concepto, pantalla o reporte.
Responsabilidades: Son sus atributos y métodos.
Colaboradores: Son las demás clases con las que trabaja en conjunto para llevar a
cabo sus responsabilidades
Las Tarjetas CRC sirven para diseñar el sistema en conjunto entre todo el equipo
permiten reducir el modo de pensar procedural y apreciar la tecnología de objetos.
Acentos
Responsabilidades Colaboradores
Atributos Métodos - Ítem
- Menuexp
- ImageView:ImageView
- Letrat: TextView
- letra_ac: ítem
- list: ListView
- arrayletra: List<ítem>
- adapter: ArrayAdapter<item>
- letra_act: item
- letras(): void
- verletra(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
47
Aprendizaje
Responsabilidades Colaboradores
Atributos Métodos - DbHelper
- Atras: ImageButton
- Siguiente: ImageButton
- Text: TextView
- Imagen: ImageView
- niv: int
- p: int
- dbHp: DbHelper
- db: SQLiteDatabase
- Query: String
- c: Cursor
- texto: String
- Ruta: String
-
- onCreate(Bundle): void
- poner_letras(int): void
- avanzar(): void
Asig_Adapter
Responsabilidades Colaboradores
Atributos Métodos - ctx: Context
- Asignaturas:<<HashMap<String,List<String>>
- Temas: List<String>
- getGroupCount(): int
- getChildrenCount(int): int
- getGroup(int): Object
- getChild(int, int): Object
- getGroupId(int): long
- getChildId(int, int): long
- hasStableIds(): Boolean
- getGroupView(int,boolean,View,ViewGroup):View
- getChildView(int,int,boolean,View,ViewGroup):View
- isChildSelectable(int,int): boolean
cont_ej
Responsabilidades Colaboradores
Atributos Métodos - Ejercicios
- DbHelper
- Cancelar:Button
- Siguiente: Button
- Preg: TextView
- Imgp: ImageView
- r1:RadioButton
- p: int
- niv: int
- aciertos: int
- Resp: String
- BPreg: String
- Ruta: String
- onCreate(Bundle): void
- analizarrespuestas(String): void
- avanzar_nivel(): void
- regresar_nivel(): void
- poner_letras(int): void
48
- Op: String
- Array: String[]
- dbHp: DbHelper
- db: SQLiteDatabase
- Query: String
- r2:RadioButton
- r3:RadioButton
- r4: :RadioButton
DataProvider
Responsabilidades Colaboradores
Atributos Métodos Glosario: List<String>
Musica: List<String> Matematicas: List<String> Det_asig: HashMap<String,List<String>>
- <String,List<String>>getinfo(): static HashMap
DbHelper
Responsabilidades Colaboradores
Atributos Métodos
- DB_NAME: static final String
- DB_SCHEME_VERSION: static final int
- Crea_Us:String
- Crea_Silencio: String
- String Crea_Num
- String Crea_Signos
- String Crea_Notas
- String Crea_PBraille
- String Crea_Braille
- String Ins_Us
- String Ins_Num
- String Ins_Sig
- String Ins_Nota
- String Ins_Silencio
- String Ins_PBraille1
- String Ins_PBraille2
- String Ins_PBraille3
- String Ins_PBraille4
- String Ins_PBraille5
- String Ins_Braille1
- String Ins_Braille2
- String Ins_Braille3
- String Ins_Braille4
- String Ins_Braille5
- void onCreate(db)
- void onUpgrade(SQLiteDatabase,int, int)
49
Ejercicios
Responsabilidades Colaboradores
Atributos Métodos - FloatingActionButton fab
- Cont_ej
- Num_ej
- Sigosmate_ej
- Notas_ej
- Silencios_ej
- HashMap<String,List<String>> lista_asignaturas
- List<String>Lista_temas
- ExpandableListView Exp_list
- Asig_Adapter Adapter
void onCreate(Bundle)
ExpAdapter
Responsabilidades Colaboradores
Atributos Métodos - ctx: Context
- Asignaturas:<<HashMap<String,List<String>>
- Temas: List<String>
- getGroupCount(): int
- getChildrenCount(int): int
- getGroup(int): Object
- getChild(int, int): Object
- getGroupId(int): long
- getChildId(int, int): long
- hasStableIds(): Boolean
- getGroupView(int,boolean,View,ViewGroup):View
- getChildView(int,int,boolean,View,ViewGroup):View
- isChildSelectable(int,int): boolean
Glosario
Responsabilidades Colaboradores
Atributos Métodos - Ítem
- Menuexp
- ImageView:ImageView
- Letrat: TextView
- letra_ac: ítem
- list: ListView
- arrayletra: List<ítem>
- adapter: ArrayAdapter<item>
- letra_act: item
- letras(): void
- verletra(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
item
Responsabilidades Colaboradores
Atributos Métodos - private String op
- private int img
public void setop(String let) public void setsimb(int simb) public int getimg()
50
public String getop()
Menuexp
Responsabilidades Colaboradores
Atributos Métodos ExpandableListView Exp_list;
HashMap<String,List<String>> lista_asignaturas;+ List<String>Lista_temas Asig_Adapter Adapter;
Música
Responsabilidades Colaboradores
Atributos Métodos - notas
- Menuexp
- ImageView:ImageView
- ImageView2:ImageView
- nota_ac: notas
- list: ListView
- arraynotas: List<ítem>
- adapter: ArrayAdapter<item>
- nota_act: notas
- notas(): void
- verlnotas(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
notas
Responsabilidades Colaboradores
Atributos Métodos - private int nota
- private int notab
public void setnot(int) public void setnotbb(int) public int getimg() public String getop()
num_ej
Responsabilidades Colaboradores
Atributos Métodos - Ejercicios
- DbHelper
- Cancelar:Button
- Siguiente: Button
- Preg: TextView
- Imgp: ImageView
- r1:RadioButton
- r2:RadioButton
- p: int
- niv: int
- aciertos: int
- Resp: String
- BPreg: String
- Ruta: String
- Op: String
- onCreate(Bundle): void
- analizarrespuestas(String): void
- poner_letras(int): void
51
- Array: String[]
- dbHp: DbHelper
- db: SQLiteDatabase
- Query: String
- r3:RadioButton
- r4:RadioButton
Numeros
Responsabilidades Colaboradores
Atributos Métodos - Ítem
- Menuexp
- ImageView:ImageView
- Letrat: TextView
- letra_ac: ítem
- list: ListView
- arrayletra: List<ítem>
- adapter: ArrayAdapter<item>
- letra_act: item
- num(): void
- vernum(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
Principal
Responsabilidades Colaboradores
Atributos Métodos - Ítem
- Menuexp
- ImageView:ImageView
- Letrat: TextView
- letra_ac: ítem
- list: ListView
- Aprendizaje
- Ejercicios
- Transcriptor
- arrayop: List<ítem>
- adapter: ArrayAdapter<item>
- letra_act: item
- opciones(): void
- veropciones(): void
- click(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
signos_mate
Responsabilidades Colaboradores
Atributos Métodos - Ítem
- Menuexp
- ImageView:ImageView
- Letrat: TextView
- letra_ac: ítem
- list: ListView
- arraylnum: List<ítem>
- adapter: ArrayAdapter<item>
- letra_act: item
- num(): void
- vernum(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
52
Signosmate_ej
Responsabilidades Colaboradores
Atributos Métodos - Ejercicios
- DbHelper
- Cancelar:Button
- Siguiente: Button
- Preg: TextView
- Imgp: ImageView
- r1:RadioButton
- r2:RadioButton
- r3:RadioButton
- r4:RadioButton
- p: int
- niv: int
- aciertos: int
- Resp: String
- BPreg: String
- Ruta: String
- Op: String
- Array: String[]
- dbHp: DbHelper
- db: SQLiteDatabase
- Query: String
- onCreate(Bundle): void
- analizarrespuestas(String): void
- poner_letras(int): void
Silencios
Responsabilidades Colaboradores
Atributos Métodos - notas
- Menuexp
- ImageView:ImageView
- ImageView2:ImageView
- nota_ac: notas
- list: ListView
- arraynotas: List<ítem>
- adapter: ArrayAdapter<item>
- nota_act: notas
- notas(): void
- verlnotas(): void
- getView(int, View, ViewGroup):View
- onCreate(Bundle): void
Silencios_ej
Responsabilidades Colaboradores
Atributos Métodos - Ejercicios
- DbHelper
- Cancelar:Button
- Siguiente: Button
- Preg: TextView
- Imgp: ImageView
- r1:RadioButton
- r2:RadioButton
- r3:RadioButton
- r4:RadioButton
- p: int
- niv: int
- aciertos: int
- Resp: String
- BPreg: String
- Ruta: String
- Op: String
- Array: String[]
- dbHp: DbHelper
- db: SQLiteDatabase
- Query: String
- onCreate(Bundle): void
- analizarrespuestas(String): void
- poner_letras(int): void
Splash
Responsabilidades Colaboradores
53
Atributos Métodos - Principal
- ImageView:
ImageView
- final ImageView ImageView
- final Animation animation
- final Animation animation2
- void onCreate(Bundle)
- void onAnimationStart(Animation)
- void onAnimationEnd(Animation)
- void onAnimationRepeat(Animation)
trans_l
Responsabilidades Colaboradores
Atributos Métodos
- int letra - public void setnot(int)
- public int getnota()
Transcriptor
Responsabilidades Colaboradores
Atributos Métodos - Button button;
- EditText editText;
- ListView list
- FloatingActionButton fab
- Trans_l
- principal
- List<trans_l> arraynotas
- int let
- String car
- View itemView
- trans_l letra_act
- void onCreate(Bundle)
- void verimg()
- void img(String)
5. Fase de Prueba Piloto
Figura 9- Menor con discapacidad visual con sus compañeros de clase
54
Fuente: Autor.
Figura 10- Menor Discapacitado con su docente.
Fuente: Autor.
55
NOTA: La identidad de los menores se encuentra protegida en cumplimiento a la LEY
ESTATUTARIA 1581 DE 2012 para mayor información consultar en el siguiente enlace
http://www.alcaldiabogota.gov.co/sisjur/normas/Norma1.jsp?i=49981
Para saber si las personas se encontraban familiarizadas con el uso de dispositivos
móviles, el sistema de lectura Braille y si estarían interesadas en una aplicación basada
en el mismo, se realizó la siguiente encuesta:
Encuesta Sobre Lenguaje Braille
Nombre: _____________________________________________________
1. ¿Tiene familiares o amigos con discapacidad visual? Si___ No____
Si su respuesta fue si, conteste la pregunta 1.1 de lo contrario siga con la pregunta 2.
1.1 Si su familiar o amigo es invidente, ¿Considera necesario aprender el lenguaje Braille para
acompañarlo en su proceso académico u otros aspectos? Si____ No____
2. ¿Cree usted que aprender el lenguaje Braille le ayudará a socializar más con una persona
invidente? Si__ No__
3. ¿Está Familiarizado(a) con los Dispositivos Móviles? Si____ No____
4. De 1 a 10 ¿Qué tanto conoce sobre el Lenguaje Braille? Siendo 1 muy poco o nada y 10
alto
1 2 3 4 5 6 7 8 9 10
5. ¿Alguna vez le han dado clases sobre el Sistema Braille? Si___ No____
Si su respuesta fue Si conteste la pregunta 5.1 por favor, si su respuesta fue No continúe con
la pregunta 6.
5.1 ¿Qué tan fluida y comprensible resultó? Siendo 1 nada comprensible y 10 perfectamente
comprensible.
1 2 3 4 5 6 7 8 9 10
6. ¿Conoce algún software móvil para aprender el lenguaje Braille? Si____ No____
7. ¿Qué tan interesado(a) estaría de aprender el lenguaje Braille si puede hacerlo desde un
dispositivo movil? Siendo 1 Nada interesado(a) y 10 muy interesado(a).
1 2 3 4 5 6 7 8 9 10
8. De los siguientes Items, ¿Cuál le gustaría encontrar en una aplicación sobre el lenguaje
Braille? (Marque con una X)
Signografía Musical
Signografía Numérica
Alfabeto
Aprendizaje
Test
Transcriptor
56
Ninguna de las anteriores
Todas las anteriores
Fue aplicada a un total de 60 personas que constaba de estudiantes y algunos
docentes, por cuestiones de seguridad e integridad personal el listado de
encuestados no se anexa, pero si en algún momento es requerido se podrá
mostrar a quien así lo disponga.
Resultados obtenidos:
1, ¿Tiene Familiares con discapacidad Visual?
El 37% de los encuestados afirma tener algún familiar o amigo en estado de discapacidad visual.
1.1 Si su familiar o amigo es invidente, ¿Considera necesario aprender el lenguaje Braille para
acompañarlo en su proceso académico u otros aspectos?
63%
37%
¿Tiene familiares o amigos con discapacidad visual?
no
si
33%
67%
Si su familiar o amigo es invidente, ¿Considera necesario aprender el
lenguaje Braille para acompañarlo en su proceso académico u otros aspectos?
no
si
57
Según esta pregunta una gran mayoría está consciente de que deben aprender el lenguaje Braille
para poder ayudar a sus familiares o amigos en algún aspecto.
2. ¿Cree usted que aprender el lenguaje Braille le ayudará a socializar más con una persona
invidente?
De nuevo una gran mayoría piensa que aprender el lenguaje Braille les puede ayudar a socializar
mejor con una persona invidente.
3. ¿Está Familiarizado(a) con los Dispositivos Móviles?
El 77% de los encuestados sabe cómo usar un dispositivo móvil, esto nos indica que es una
buena plataforma para tener una aplicación donde puedan acceder a la información sobre el
lenguaje Braille.
37%
63%
¿Cree usted que aprender el lenguaje Braille le ayudará a socializar más con
una persona invidente?
no
si
23%
77%
¿Está Familiarizado(a) con los Dispositivos Móviles?
no
si
58
4. De 1 a 10 ¿Qué tanto conoce sobre el Lenguaje Braille? Siendo 1 muy poco o nada y 10
alto
En esta pregunta están muy divididos, pero se puede analizar que una gran mayoría no
domina el lenguaje Braille.
5. ¿Alguna vez le han dado clases sobre el Sistema Braille?
Un gran porcentaje no ha recibido adiestramiento sobre este tipo de lenguaje, lo que
indica que las falencias son altas.
13%
12%
11%
9%11%
10%
4%4%
15%
11%
¿De 1 a 10 ¿Qué tanto conoce sobre el Lenguaje Braille? Siendo 1 muy poco o
nada y 10 alto
1
2
3
4
5
6
7
8
9
75%
25%
¿Alguna vez le han dado clases sobre el Sistema Braille?
no
si
59
5.1 ¿Qué tan fluida y comprensible resultó? Siendo 1 nada comprensible y 10 perfectamente
comprensible.
Las personas que tuvieron una clase sobre este lenguaje no quedaron muy conformes en
su gran mayoría, es decir, las clases que recibieron no fueron muy buenas.
6. ¿Conoce algún software móvil para aprender el lenguaje Braille?
El 80% de los encuestados no conoce ningún software móvil que lo ayude a aprender el
lenguaje así que realizar una aplicación para este tipo de dispositivos ayudará a acceder a
in formación sobre este lenguaje a las personas que lo deseen.
15%
23%
35%
12%
15%
¿Qué tan fluida y comprensible resultó? Siendo 1 nada comprensible
y 10 perfectamente comprensible
1
2
3
4
5
80%
20%
¿Conoce algún software móvil para aprender el lenguaje Braille?
no
si
60
7. ¿Qué tan interesado(a) estaría de aprender el lenguaje Braille si puede hacerlo desde un
dispositivo móvil? Siendo 1 Nada interesado(a) y 10 muy interesado(a).
De acuerdo a la gráfica podemos analizar que un sector importante de personas está interesada
en aprender este lenguaje, ya sea para ayudar a sus compañeros o sólo para adquirir este
conocimiento.
3%5%5%
11%
10%
18%2%3%
43%
¿Qué tan interesado(a) estaría de aprender el lenguaje Braille si puede hacerlo desde un
dispositivo movil? Siendo 1 Nada interesado(a) y 10 muy interesado(a).
1
2
3
4
5
6
7
8
10
61
8. De los siguientes Ítems, ¿Cuál le gustaría encontrar en una aplicación sobre el lenguaje
Braille? (Marque con una X)
Un sector importante se sintió atraído por una aplicación que cumpliera con los módulos que se
han propuesto para este proyecto.
Figura 11- Estudiante usando AppBraille
Fuente:Autor.
12%
15%
18%10%8%
37%
De los siguientes Items, ¿Cuál le gustaría encontrar en una aplicación sobre el lenguaje Braille? (Marque con una X)
Alfabeto
Aprendizaje
Ninguna de las anteriores
Signografía Musical
Signografía Numérica
Todas las anteriores
62
Se entregó a aplicación a los interesados en aprender el lenguaje. Dos semanas después volví al
colegio a revisar si ahora socializaban más con sus compañeros invidentes y así fue, los vinculaban
en actividades en las que no participaban antes.
Figura 12- Estudiante ayudando a su compañera a jugar “Cajurzoo” un elemento desarrollado por
un docente del plantel.
Fuente: Autor.
Figura 13- Estudiantes en una celebración con su compañera invidente.
Fuente: Autor.
63
Los Docentes Elsa López, Maritza Castañeda, y Raúl Sánchez manifestaron que la aplicación les
ayudó a mejorar su método de enseñanza con los menores invidentes, y que sus compañeros los
ayudaban a aprender lo que mejoró sus notas un poco. Pero dijeron que algunas veces no los
dejaban aprender por sí mismos, así que esto podría empeorar la situación porque los haría más
dependientes.
9. Fase De Implantación
10. Metodología
Para el desarrollo del presente trabajo, se escogió la metodología XP la cual
implica un desarrollo incremental iterativo de pequeñas partes, con entregas y
pruebas frecuentes, proporciona un flujo de retro-información valioso para detectar
los problemas o desviaciones.
Generalmente se siguen los siguientes pasos:
El cliente define el valor de negocio a implementar
El programador estima el esfuerzo necesario para su implementación
El cliente selecciona qué construir, de acuerdo con sus prioridades y las
restricciones de tiempo
El programador construye ese valor de negocio
Vuelve al paso 1
Las fases que se plantearon para el presente proyecto son:
10.1 Exploración:
Durante esta etapa, se identificaron las historias de usuario más relevantes para la
primera entrega del producto, mientras el programador (ejecutante) se
HARDWARE SOTWARE
Pantalla 768x1280 -dpi Memoria: 5MB libres para su instalación. RAM: 1GB
Sistema Operativo: Android 4.4.4(API 19) o superior posterior hasta Android 4.1.1 (API 16) Aplicaciones: Antivirus. (Opcional) Procesador de texto Visor de imágenes Lector de archivos PDF
64
familiarizaba con las herramientas y buscaba documentación para iniciar con el
proyecto.
10.2 Planificación de La entrega:
En esta etapa se estableció una prioridad para las historias de usuario. Además,
se realizó una estimación del tiempo y esfuerzo que tomaría realizar cada una de
las historias, se determinó un cronograma y la fecha para realizar la primera
entrega.
Las Historias de usuario escogidas para la primera entrega fueron las siguientes:
Historia de Usuario
Número: 1 Nombre: Bienvenida
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 1
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Realizar una animación de bienvenida para que el usuario sienta más interés en la aplicación.
Observaciones
Que sea atractiva a la vista
Historia de Usuario
Número: 2 Nombre: Menú Principal
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 1
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:2
Descripción.
Realizar el menú principal de la aplicación para verificar que sea intuitivo y llamativo.
Observaciones
Debe tener imágenes.
Historia de Usuario
Número: 3 Nombre: Glosario (Alfabeto)
65
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 1
Prioridad en Negocio (Alta/Media/Baja): Media Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Media Puntos Reales:2
Descripción.
Realizar la primera parte del glosario, es decir la parte que contiene el alfabeto en braille.
Observaciones
Se debe determinar fácilmente la representación de cada letra.
La primera entrega se estableció en 5 semanas y se cumplió con el plazo
establecido.
10.3 Iteraciones:
En esta fase se estableció el siguiente pasó a seguir antes de entrar en la fase
de producción, en esta etapa lo recomendable es realizar iteraciones que no
tomen más de tres semanas y determinar una arquitectura que se pueda
reutilizar durante el proyecto; ya que una de las prácticas de Xp es
Implementar la solución más simple que pueda funcionar. Por lo tanto las
siguientes iteraciones tienen como objetivo terminar el glosario.
Historia de Usuario
Número: 4 Nombre: Glosario (Dividir en Categorías)
Usuario: Usuario
Modificación de Historia Número:3 Iteración Asignada: 2
Prioridad en Negocio (Alta/Media/Baja): Media Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Alta Puntos Reales:2
Descripción.
Realizar la división del glosario por las categorías que se quieren ubicar allí.
Observaciones
Agrupar el glosario por asignaturas.
Historia de Usuario
Número: 5 Nombre: Glosario (Matemáticas)
66
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 2
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar la parte numérica del Braille al glosario dentro de la categoría “Matemáticas”
Observaciones
El glosario debe estar agrupado por categorías.
Historia de Usuario
Número: 6 Nombre: Glosario (Música)
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 3
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar al glosario las notas musicales en braille.
Observaciones
Agregar la representación por notas y figuras.
Historia de Usuario
Número: 7 Nombre: Glosario (agregar acentuación al alfabeto)
Usuario: Usuario
Modificación de Historia Número:3 Iteración Asignada: 3
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar una lista de las vocales con tilde y su representación en Braille.
Observaciones
Que esté dentro de la categoría alfabeto.
67
Historia de Usuario
Número: 8 Nombre: Glosario (Signos Matemáticos)
Usuario: Usuario
Modificación de Historia Número:5 Iteración Asignada: 3
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar una lista de signos matemáticos Básicos en Braille.
Observaciones
Debe estar en la sección de Matemáticas.
Las iteraciones 2 y 3 tomaron 3 semanas respectivamente en ser completadas,
por lo que se cumplió el objetivo de hacer iteraciones que no sobrepasaran el
tiempo recomendado. Se terminó el primer módulo y se decidió que ya estaba listo
para entrar a la fase de producción y hacer unas pruebas preliminares.
10.4 Producción:
Durante esta etapa se realizaron pruebas preliminares, se encontró un problema
con la aplicación, este era que las actividades se ejecutaban en segundo plano al
cambiar a otra lo que hacía que se consumiera más recursos de los esperados; se
sugirió solucionar este problema y agregar nuevas característica a la aplicación
antes de pasar a la fase de Mantenimiento.
Historia de Usuario
Número: 9 Nombre: Finalizar Actividades
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 4
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Las actividades se ejecutan en segundo plano, al presionar el botón “regresar” del .,dispositivo se regresa a las actividades que se abrieron anteriormente.
Observaciones
Cuando pase de una actividad a otra no se debe ejecutar en segundo plano.
68
Historia de Usuario
Número: 10 Nombre: Glosario (Silencios Musicales)
Usuario: Usuario
Modificación de Historia Número:6 Iteración Asignada: 4
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar una lista de la representación de los Silencios Musicales en Braille.
Observaciones
Debe estar en la sección de Música.
Historia de Usuario
Número: 11 Nombre: Base de Datos
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 5
Prioridad en Negocio (Alta/Media/Baja): Alta Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Alta Puntos Reales:2
Descripción.
Crear una base de datos para almacenar los ejercicios que se van a plantear para reforzar.
Observaciones
Historia de Usuario
Número: 12 Nombre: Transcriptor
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 6
Prioridad en Negocio (Alta/Media/Baja): Alta Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Alta Puntos Reales:2
Descripción.
Realizar la Programación del módulo de transcripción
Observaciones
69
Debe transcribir el texto que el usuario digite.
Historia de Usuario
Número: 13 Nombre: Evaluación
Usuario: Usuario
Modificación de Historia Número:11 Iteración Asignada: 7
Prioridad en Negocio (Alta/Media/Baja): Alta Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Alta Puntos Reales:2
Descripción.
Realizar la programación del módulo de Evaluación, agregar una prueba.
Observaciones
El examen se debe cargar desde la base de datos.
Historia de Usuario
Número: 14 Nombre: Evaluación
Usuario: Usuario
Modificación de Historia Número:13 Iteración Asignada: 7
Prioridad en Negocio (Alta/Media/Baja): Media Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Agregar los exámenes de los temas que trata la aplicación.
Observaciones
El usuario ingresa al módulo de examen y desde allí debe poder elegir la evaluación del tema que deseé, algo parecido al glosario.
Con la última iteración se considera que se cumplió con los requerimientos para
pasar a la fase de mantenimiento y realizar nuevas pruebas a la aplicación.
10.5 Mantenimiento:
En esta etapa se considera finalizada la primera versión de la aplicación, después
de las pruebas elaboradas se determinaros nuevas iteraciones para mejorar la
aplicación.
70
Historia de Usuario
Número: 15 Nombre: Aprendizaje
Usuario: Usuario
Modificación de Historia Número: Iteración Asignada: 8
Prioridad en Negocio (Alta/Media/Baja): Media Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
Desarrollar un módulo de aprendizaje para que el usuario pueda entender mejor el lenguaje Braille.
Observaciones
La información que va a usar este módulo debe tomarse de la base de datos.
Historia de Usuario
Número: 16 Nombre: Error Evaluación
Usuario: Usuario
Modificación de Historia Número:14 Iteración Asignada: 8
Prioridad en Negocio (Alta/Media/Baja): Baja Puntos Estimados: 1
Riesgo en Desarrollo (Alta/Media/Baja): Baja Puntos Reales:1
Descripción.
La evaluación de uno de los niveles de Braille es incorrecta, porque se está tomando el nivel 4 como 5 y viceversa.
Observaciones
Modificar la base de datos.
Historia de Usuario
Número: 17 Nombre: Transcriptor
Usuario: Usuario
Modificación de Historia Número:12 Iteración Asignada: 9
Prioridad en Negocio (Alta/Media/Baja): Alta Puntos Estimados: 2
Riesgo en Desarrollo (Alta/Media/Baja): Media Puntos Reales:2.5
Descripción.
El método en que se transcribe el texto es algo ineficiente, se recomienda buscar otra manera de mostrar la transcripción.
Observaciones
71
Se recomienda generar un documento o algo parecido, donde el usuario pueda usar de forma eficiente al material generado.
7.6 Muerte Del Proyecto:
Con la iteración número 9 se alcanza la Muerte del proyecto, tanto el cliente, tester
y el Coach no tienen más historias de usuario para agregar al proyecto. Se deja
en manos del programador hacer una revisión exhaustiva y agregar correcciones
si lo cree necesario.
Después de trabajar un máximo de 40 horas por semana como lo recomienda la
metodología, porque el trabajo extra desmotiva al equipo; se calculó que se
trabajaron un total de 980 horas.
Roles:
En la metodología XP existen diferentes roles y responsabilidades para llevar a
cabo las tareas y los planes durante el proceso de desarrollo los cuales son:
El programador: escribe las pruebas unitarias y produce el código del
sistema. Define las tareas que conlleva cada historia de usuario, y estima el
tiempo que requerirá cada una. El ejecutante (Arnold Alfonso) fue el
encargado de asumir este rol.
El cliente escribe las historias de usuario y las pruebas funcionales para
validar su implementación. Asigna la prioridad a las historias de usuario y
decide cuáles se implementan en cada iteración centrándose en aportar
mayor valor al negocio.
El ejecutante asumió el rol de cliente, junto con la ayuda de una amiga
(Nathaly Jaimes), se consideró que el cliente debería ser alguien externo al
grupo de trabajo que tuviera conocimientos en el área para evaluar
adecuadamente la aplicación.
El encargado de pruebas ayuda al cliente a escribir las pruebas
funcionales. Ejecuta las pruebas regularmente, difunde los resultados en el
equipo y es responsable de las herramientas de soporte para pruebas. Los
alumnos y docentes que probaron la aplicación fueron los encargados de
asumir este rol.
El entrenador es responsable del proceso global. Experto en XP, provee
de las guías a los miembros del equipo para que se apliquen las prácticas
XP y se siga el proceso correctamente. Determina la tecnología y
metodologías a usar por el equipo de desarrollo.
José Vicente Reyes fue el responsable del proceso, brindando asesorías y
seguimiento al desarrollo del proyecto.
72
PRUEBAS DE ACEPTACIÓN
Permite confirmar que la historia ha sido implementada correctamente:
CASO DE PRUEBA DE ACEPTACIÓN
Código: 1 Historia de Usuario: 1
Nombre: Bienvenida.
Descripción: Realizar una animación de bienvenida para que el usuario sienta más interés en la aplicación.
Condiciones de Ejecución: La animación debe ejecutarse al iniciar la aplicación.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe validar que sea agradable para el usuario.
Resultado esperado: Cuando se ejecuté la animación debe proceder al menú principal.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 3 Historia de Usuario: 3
Nombre: Glosario (Alfabeto).
Descripción: Realizar la primera parte del glosario, es decir la parte que contiene el alfabeto en braille
Condiciones de Ejecución: El menú debe enviar al usuario a una actividad donde pueda acceder al glosario y consultar el alfabeto.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe cargar la animación. 3. Debe aparecer el menú principal. 4. Al acceder al glosario este debe mostrar la opción de consultar el alfabeto.
Resultado esperado: Se debe determinar fácilmente la representación de cada letra.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 4 Historia de Usuario: 4
Nombre: Glosario (Dividir en Categorías).
Descripción: Realizar la división del glosario por las categorías que se quieren ubicar allí.
Condiciones de Ejecución: Al entrar al glosario, este debe estar dividido por categorías.
Entrada/Pasos de ejecución:
73
1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías.
Resultado esperado: Se debe poder elegir la categoría que se desee consultar.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 5 Historia de Usuario: 5
Nombre: Glosario (Matemáticas).
Descripción: Agregar la parte numérica del Braille al glosario dentro de la categoría “Matemáticas”.
Condiciones de Ejecución: El glosario debe estar dividido en categorías y subcategorías.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías. 4. Elegir matemáticas y acceder a la opción para consultar los números.
Resultado esperado: Cuando se elija la categoría de números dentro de matemáticas se deben mostrar los números y su representación en braille.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 6 Historia de Usuario: 6
Nombre: Glosario (Música).
Descripción: Agregar al glosario las notas musicales en braille.
Condiciones de Ejecución: El glosario debe estar dividido en categorías y subcategorías.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías. 4. Elegir música y acceder a la opción para consultar las notas.
Resultado esperado: Cuando se elija la categoría de notas dentro de música se deben mostrar las notas y su representación en braille.
Evaluación de la prueba: Positiva.
74
CASO DE PRUEBA DE ACEPTACIÓN
Código: 7 Historia de Usuario: 7
Nombre: Glosario (agregar acentuación al alfabeto).
Descripción: Agregar una lista de las vocales con tilde y su representación en Braille.
Condiciones de Ejecución: El glosario debe estar dividido en categorías y subcategorías.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías. 4. Elegir alfabeto y acceder a la opción para consultar los acentos.
Resultado esperado: Cuando se elija la categoría de acentos dentro de alfabeto se deben mostrar las vocales acentuadas y su representación en braille.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 8 Historia de Usuario: 8
Nombre: Glosario (Signos Matemáticos).
Descripción: Agregar una lista de signos matemáticos Básicos en Braille.
Condiciones de Ejecución: El glosario debe estar dividido en categorías y subcategorías.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías. 4. Elegir Matemáticas y acceder a la opción para consultar los signos
matemáticos.
Resultado esperado: Cuando se elija la categoría de signos matemáticos dentro de matemáticas se deben mostrar los signos básicos y su representación en braille.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 9 Historia de Usuario: 9
Nombre: Finalizar Actividades.
Descripción: Las actividades se ejecutan en segundo plano, al presionar el botón “regresar” del dispositivo se regresa a las actividades que se abrieron anteriormente.
Condiciones de Ejecución: Se debe estar ejecutando la aplicación.
Entrada/Pasos de ejecución:
75
1. Se debe ejecutar la aplicación en el dispositivo. 2. Navegar por la aplicación 3. Al presionar la tecla “regresar” del dispositivo se debe salir de ella.
Resultado esperado: Al presionar la tecla “regresar” del dispositivo se debe salir de la aplicación.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 10 Historia de Usuario: 10
Nombre: Glosario (Silencios Musicales).
Descripción: Agregar una lista de la representación de los Silencios Musicales en Braille.
Condiciones de Ejecución: El glosario debe estar dividido en categorías y subcategorías.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al glosario desde el menú principal. 3. Cargar el módulo dividido en categorías. 4. Elegir Música y acceder a la opción para consultar los silencios musicales.
Resultado esperado: Cuando se elija la categoría de silencios musicales dentro de música se deben mostrar los silencios y su representación en braille.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 11 Historia de Usuario: 11
Nombre: Base de Datos.
Descripción: Crear una base de datos para almacenar los ejercicios que se van a plantear para reforzar.
Condiciones de Ejecución: La base de datos se debe crear cuando inicie la aplicación.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe crear la base de datos.
Resultado esperado: La base de datos se debe crear cuando inicie la aplicación.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
76
Código: 12 Historia de Usuario: 12
Nombre: Transcriptor.
Descripción: Realizar la Programación del módulo de transcripción.
Condiciones de Ejecución: Se debe acceder al transcriptor desde el menú principal.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe acceder al módulo de transcripción.
Resultado esperado: Digitar texto en el campo designado y realizar una transcripción.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 13 Historia de Usuario: 13
Nombre: Evaluación.
Descripción: Realizar la programación del módulo de Evaluación, agregar una prueba.
Condiciones de Ejecución: El módulo de evaluación debe cargar un examen desde la base de datos.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe acceder al módulo de Evaluación. 3. Escoger un examen.
Resultado esperado: Cuando se cargue el examen, se debe poder solucionar por el usuario.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 14 Historia de Usuario: 14
Nombre: Evaluación.
Descripción: Agregar los exámenes de los temas que trata la aplicación.
Condiciones de Ejecución: El módulo de evaluación debe estar completo.
Entrada/Pasos de ejecución: 1. Se debe acceder al módulo de Evaluación. 2. Escoger un examen.
Resultado esperado: El módulo de evaluación debe tener los exámenes cargados.
77
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 15 Historia de Usuario: 15
Nombre: Aprendizaje.
Descripción: Desarrollar un módulo de aprendizaje para que el usuario pueda entender mejor el lenguaje Braille.
Condiciones de Ejecución: La animación debe ejecutarse al iniciar la aplicación.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Se debe poder acceder al módulo de aprendizaje desde el menú principal.
Resultado esperado El módulo debe mostrar la información desde la base de datos.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 16 Historia de Usuario: 16
Nombre: Error Evaluación.
Descripción: La evaluación de uno de los niveles de Braille es incorrecta, porque se está tomando el nivel 4 como 5 y viceversa.
Condiciones de Ejecución: Cargar el módulo de evaluación y escoger evaluar nivel Braille.
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al módulo de evaluación desde el menú principal. 3. Cargar el examen de evaluación nivel Braille.
Resultado esperado: Las preguntas de la serie 4 y 5 deben de cambiarse por las de la otra.
Evaluación de la prueba: Positiva.
CASO DE PRUEBA DE ACEPTACIÓN
Código: 17 Historia de Usuario: 17
Nombre: Transcriptor.
Descripción: El método en que se transcribe el texto es algo ineficiente, se recomienda buscar otra manera de mostrar la transcripción.
Condiciones de Ejecución: La animación debe ejecutarse al iniciar la aplicación.
78
Entrada/Pasos de ejecución: 1. Se debe ejecutar la aplicación en el dispositivo. 2. Acceder al módulo de transcripción desde el mení principal. 3. Realizar una transcripción.
Resultado esperado: La transcripción se debe realizar en un documento o de una manera más eficiente.
Evaluación de la prueba: Positiva.
Conclusiones
• Para aprender el lenguaje Braille no es suficiente con tener acceso al
glosario, por esto se desarrolló un módulo de aprendizaje, el cual permite al
usuario aprender de una forma más sencilla.
• Se debe aprovechar el incremento en las nuevas tecnologías para adaptar
la enseñanza tradicional Braille hacia los dispositivos móviles, para que de
esta manera se pueda tener un mejor ambiente de aprendizaje donde
hayan estudiantes invidentes.
• Se requiere el asesoramiento de un tiflólogo para poder trabajar sobre el
lenguaje Braille o en su defecto tener acceso a documentación del lenguaje
en fuentes de confianza cómo en INCI, CRAC o la ONCE.
• La metodología XP permite un desarrollo ágil y eficiente, ya que trabajar por
iteraciones permite tener un mayor control sobre el desarrollo del proyecto y
no se invierte mucho tiempo en la documentación.
• Cuando un menor invidente siente apoyo por parte de sus compañeros lo
motiva a estudiar más y superarse, pero no debe recibir mucha ayuda
porque puede volverse dependiente, sólo es bueno involucrarse cuando
realmente lo necesite.
• La aplicación cuenta con un módulo de evaluación eficiente, el cual permite
garantizar que el usuario aprenda el lenguaje; ya que si fracasa en un
examen lo devuelve al nivel anterior o no le permite subir de nivel.
Recomendaciones
La investigación realizada durante el proyecto y las pruebas realizadas permiten
establecer algunas recomendaciones:
79
Es muy bueno apoyar a un estudiante con discapacidad visual en su
proceso educativo, pero no se debe exagerar en este aspecto porque
puede llegar a complicar el problema.
El usuario debe tener conocimiento sobre el uso de dispositivos móviles, y
conocer el alfabeto para que pueda aprender el lenguaje Braille.
La aplicación debe ser instalada solo en dispositivos con Sistema Operativo
Android.
Si se quisiera realizar futuras versiones del aplicativo es aconsejable:
La aplicación enseña como leer Braille pero no se tuvo en cuenta el
proceso de escritura, sólo se le mencionó a los usuarios que para escribir
se hace de derecha a izquierda y se lee de izquierda a derecha.
Se sugiere que se agregue un módulo sobre química ya que no hay mucha
documentación sobre esta asignatura en Braille, y la tabla periódica abarca
unas 20 hojas.
80
BIBLIOGRAFÍA
Niños y niñas con discapacidad visual en Colombia. Disponible en internet:< http://www.mineducacion.gov.co/cvn/1665/w3-article-303293.html > [con acceso el 30-08-2015]
Invidentes afectados por derechos de autor. Disponible en internet:< http://www.elespectador.com/dean-lermer/invidentes-afectados-derechos-de-autor-articulo-366637 > [con acceso el 29-08-2015]
IRIS en Colombia. Disponible en internet:< http://www.duto.org/proyectos/iris_en_colombia/ > [con acceso el 07-09-2015]
Guía didáctica para uso de Braillín. Disponible en internet:< http://www.juntadeandalucia.es/averroes/caidv/interedvisual/ftp/guia_didactica_uso_braillin.doc > [con acceso el 07-09-2015]
La educación musical de personas con deficiencia visual y la musicografía braille. Disponible en internet:< http://www.saccom.org.ar/2010_reunion9/actas/11.Bertevelli.pdf > [con acceso el 15-09-2015]
Matemáticas para invidentes. . Disponible en internet:< http://discapacidadcero.weebly.com/matematicas-para-no-videntes.html#.VfkcDxF_NBc > [con acceso el 15-09-2015]
MONTERO, Miguel. Android Desarrollo De Aplicaciones. Primera Edición. Editorial Ra-ma. p. 27-40
Sarmiento, Alfredo .Situación Educación. Tercera Edición. Observatorio de Educación de Uninorte. P.64-73
Aplicaciones móviles colombianas con calidad de exportación. Disponible
en internet:< http://www.mintic.gov.co/portal/604/w3-article-8396.html >
[con acceso el 20-10-2015]
Dispositivo tecnológico para la optimización del tiempo de aprendizaje del lenguaje Braille en personas invidentes. Disponible en internet:< http://www.scielosp.org/pdf/rsap/v13n5/v13n5a15.pdf > [con acceso el 07-09-2015]
81
A B Sé! Sistema para el aprendizaje de Lectoescritura en Braille. Disponible en internet:< http://repository.javeriana.edu.co/bitstream/10554/4234/1/tesis97.pdf> [con acceso el 07-09-2015]
BrailleSoft: Software traductor de lenguaje Braille a digital y viceversa. Disponible en internet:< http://reposital.cuaed.unam.mx:8080/jspui/bitstream/123456789/3774/1/VE13.295.pdf> [con acceso el 07-09-2015]
Educación inclusiva: discapacidad visual módulo 5: el sistema braille. Disponible en internet:< http://www.ite.educacion.es/formacion/materiales/129/cd/pdf/m5_dv.pdf> [con acceso el 15-09-2015]
Capítulo 2. IAGP 2005/06. Metodologías de desarrollo de software. Disponible en internet:< http://www.um.es/docencia/barzana/IAGP/Iagp2.html> [con acceso el 20-10-2015]
Lección 2 ¿Que es una Aplicación Móvil?. Disponible en internet:< http://datateca.unad.edu.co/contenidos/233016/EXE_SAM/leccin_2_que_es_una_aplicacin_mvil.html > [con acceso el 20-10-2015]
Congreso de Colombia, ley no. 1341. Disponible en internet:< http://www.mintic.gov.co/portal/604/articles-3707_documento.pdf > [con acceso el 20-10-2015]
El sistema Operativo GNU. Disponible en internet:< http://www.gnu.org/licenses/licenses.es.html > [con acceso el 20-10-2015 ]
Orientaciones Pedagógicas para La Atención Educativa a Estudiantes con Limitación Visual ministerio De Educación Nacional. Disponible en internet:<http://www.colombiaaprende.edu.co/html/micrositios/1752/articles-320691_archivo_2.pdf> [con acceso el 13-03-2016 ]
82
INFOGRAFÍA
MINSALUD, Registro de Localización y Caracterización de Personas con
Discapacidad. Disponible en internet:< https://www.minsalud.gov.co/proteccionsocial/Paginas/DisCapacidad_RLCPD.aspx > [con acceso el 15-09-2015]
Decisión Andina 351 de 1993 Régimen Común sobre derecho de autor y derechos conexos. Disponible en internet:< http://www.egeda.com.pe/documentos/Decision_351.pdf> [con acceso el 20-10-2015]
Congreso de Colombia, ley no. 1680. Disponible en internet:< http://www.mintic.gov.co/portal/604/articles-5006_documento.pdf > [con acceso el 27-09-2015
Congreso de Colombia, ley estatutaria no. 1618. Disponible en internet:< http://wsp.presidencia.gov.co/Normativa/Leyes/Documents/2013/LEY%201618%20DEL%2027%20DE%20FEBRERO%20DE%202013.pdf > [con acceso el 27-09-2015]
Sistema operativo Android: características y funcionalidad para dispositivos móviles. Disponible en internet:< http://repositorio.utp.edu.co/dspace/bitstream/11059/2687/1/0053M722.pdfintegrado > [con acceso el 20-10-2015]
Dificultades de aprendizaje en el alumnado con déficit visual y ciego. Disponible en internet:< http://www.foal.es/sites/default/files/docs/4_dificultad_de_aprendizaje_0.pdf > [con acceso el 15-09-2015]
Discapacidad en Colombia: Reto para la Inclusión en Capital Humano. Disponible en internet:< http://www.colombialider.org/wp-content/uploads/2011/03/discapacidad-en-colombia-reto-para-la-inclusion-en-capital-humano.pdf > [con acceso el 15-09-2015]
Alumnos con discapacidad visual. necesidades y respuesta educativa. Disponible
en internet:<
http://educacion.once.es/appdocumentos/educa/prod/Necesidades%20y%20respu
esta%20educativa.pdf > [con acceso el 15-09-2015]
Programación Extrema. Disponible en internet:<
http://eisc.univalle.edu.co/materias/WWW/material/lecturas/xp.pdf> [con acceso el
20-10-2015 ]
83
Colombia avanza hacia una educación inclusiva con calidad (I). Disponible
en Internet:<http://www.mineducacion.gov.co/cvn/1665/article-
168443.html>[con acceso el 12-03-2016 ]
84
85
ANEXOS
Anexo A:
Manual De Programador
Anexo B:
Manual De Usuario
Anexo C:
Código Fuente
86
MANUAL DEL PROGRAMADOR.
APLICACIÓN MÓVIL PARA EL APRENDIZAJE DEL LENGUAJE BRAILLE Y LA
SIGNOGRAFÍA BÁSICA USADA EN LAS ÁREAS DE MATEMÁTICAS Y
MÚSICA EN PERSONAS VIDENTES
ARNOLD STIVEN ALFONSO CONTRERAS
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS
FACULTAD TECNOLOGICA
TECNOLOGIA EN SISTEMATIZACION DE DATOS
BOGOTA
2016
87
Contenido
1. INTRODUCCIÓN ......................................................................................................................... 88
2. REQUERIMIENTOS ..................................................................................................................... 88
3. DESCARGA E INSTALACIÓN DE REQUERIMIENTOS. .................................................................. 88
4. DEFINICIONES A TENER EN CUENTA ......................................................................................... 94
5. DOCUMENTACIÓN TÉCNICA ......................................................................................................... 95
5.1 Descripción de clases utilizadas. ............................................................................................. 95
5.2 Descripción de actividades utilizadas. ..................................................................................... 96
5.3 Descripción de recursos adicionales: ...................................................................................... 97
6. FUNDAMENTOS DE PROGRAMACIÓN: ........................................................................................ 101
6.1 Fundamentos modulo Aprendizaje: ...................................................................................... 101
6.2 Fundamentos modulo Glosario: ............................................................................................ 102
6.3 Fundamentos modulo Evaluación: ........................................................................................ 102
6.4 Fundamentos modulo Transcriptor: ..................................................................................... 102
6.5 Actividades y clases extra: ..................................................................................................... 102
7. IMPLEMENTACIÓN DE CÓDIGO DE IMPORTANCIA: ................................................................ 103
7.1 Clases ..................................................................................................................................... 103
88
1. INTRODUCCIÓN
El propósito de este manual del programador es proporcionar al usuario el código
fuente de la aplicación móvil que se desarrolló, de una manera concisa y amena.
En este manual podrá encontrar el código de los métodos empleados para el buen
funcionamiento de la aplicación realizada para el sistema operativo Android.
2. REQUERIMIENTOS
Para el desarrollo de la aplicación se utilizaron las siguientes herramientas, cada
una con su link oficial de descarga.
1. Java Development Kit (JDK): contiene el entorno de desarrollo de Java
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-
2133151.html
2. Android Studio: Entorno de programación de Android
http://developer.android.com/sdk/installing/index.html?pkg=studio
3. Genymotion: Emulador utilizado para testeo de la
aplicación https://www.genymotion.com/download/
4. SQLite: librería que implementa un sistema autónomo, en este caso
Android Studio
3. DESCARGA E INSTALACIÓN DE REQUERIMIENTOS.
Java Development Kit (JDK):
1. Se abre el link de descarga.
2. Se selecciona la opción que corresponde al Sistema Operativo y aceptar la
licencia.
89
Imagen 1 (selección de sistema operativo)
Fuente: Autor
3. Una vez descargado tienes que ir a la carpeta donde se descargó el
archivo
4. Ejecutarlo como administrador
5. Cuando se abra esta ventana dar clic en siguiente
Imagen 2 (inicio de instalación)
Fuente: Autor
90
5. Dar siguiente en las posteriores ventanas
6. Elegir la carpeta donde se instalara java y dar clic en siguiente
Imagen 3 (selección de carpeta raíz)
Fuente: Autor
7. Una vez terminada la instalación dar clic en cerrar
Imagen 4 (finalización de instalación)
Fuente: Autor
91
Android Studio:
1. Dirigirse al link de descarga, el tamaño del instalador es de 1.1 GB.
2. Dirigirse a la carpeta donde quedo guardado el instalador y abrirlo,
aparecerá el asistente.
Imagen 5 (inicio asistente)
Fuente: Autor
3. Elegir componentes a instalar, lo más recomendable es seleccionar
todas las opciones
Imagen 6 (elección de paquetes)
Fuente: Autor
4. Elegir ruta de instalación de Android Studio y ruta de instalación de SDK.
92
Imagen 7 (elección de carpetas raíz)
Fuente: Autor
5. Una vez finalice la instalación Android Studio se conectará a Internet y
descargará los elementos del SDK necesarios para funcionar correctamente.
Imagen 8 (finalización de instalación de paquetes SDK)
Fuente: Autor
6. Una vez terminado le damos finalizar y listo.
93
Genymotion:
1. Abrir link de descarga.
2. Registrarse en la página oficial.
3. Elegir la opción de Genymotion con virtual-Box para no tener
inconvenientes.
Imagen 9 (Seleccionar Opción de descarga)
Fuente: Autor
4. Con la herramienta Genymotion no son muchos los pasos a confirmar,
tan solo uno le damos siguiente a la bienvenida.
Imagen 10 (ventana de inicio del asistente)
94
Fuente: Autor
5. Dar clic en finalizar y marcar la casilla launch si se desea abrir cuando
finalice
Imagen 11 (finalización de instalación de paquetes)
Fuente: Autor
4. DEFINICIONES A TENER EN CUENTA
ListView:
Una vista ListView visualiza una lista deslizable verticalmente de
varios elementos, donde cada elemento puede definirse como un
Layout .Su utilización es algo compleja, pero muy potente.
ExpandableListView:
Listview que permite agrupar los datos para suministrar la
información de manera más eficiente. Su uso es más complejo que
el del componente mencionado anteriormente.
95
5. DOCUMENTACIÓN TÉCNICA
5.1 Descripción de clases utilizadas.
En este punto se procederá a describir los archivos contenidos en la aplicación, en
la siguiente tabla se encuentra el nombre de la clase usada y una breve
descripción de su función.
Tabla1. Descripción de las clases
Clase Descripción
acentos Clase encargada de configurar el ListView que muestra los símbolos para representar las vocales con tilde.
Aprendizaje Clase que cuenta con los métodos para poder acceder al aprendizaje del idioma de acuerdo al nivel del usuario.
Asig_Adapter Clase encargada de proporcionar los métodos necesarios para configurar el ExpandableListView del menú con el que cuenta el módulo glosario.
Cont_ej Clase que proporciona los métodos necesarios para poder evaluar el nivel de conocimiento sobre una serie Braille.
DataProvider Configura la información que se va a mostrar en el ExpandableListView del Glosario.
DbHelper Clase encargada de crear la base de datos con la que funciona la aplicación.
Ejercicios Clase encargada de re direccionar a las actividades dónde se encuentran los ejercicios, según el tema que elija el usuario.
ExpAdapter Clase encargada de proporcionar los métodos necesarios para configurar el ExpandableListView del menú con el que cuenta la actividad Ejercicios.
Glosario Clase encargada de mostrar la información sobre la representación de las letras en Braille.
Ítem Clase encargada de configurar el ListView de las actividades Glosario, acentos, numeros y signos_mate. Permite mostrar la información de forma ordenada.
Menuexp Clase encargada de re direccionar a las actividades dónde se encuentra la información del tema que elija el usuario.
musica Clase encargada de configurar el ListView que muestra la representación de las notas musicales en braille
notas Clase encargada de configurar el ListView de las Actividades musica y silencios. Permite mostrar la información de forma ordenada.
notas_ej Clase que se encarga de cargar y evaluar el test correspondiente a las notas musicales.
num_ej Clase que se encarga de cargar y evaluar el test correspondiente a los números.
numeros Clase encargada de configurar el ListView que muestra la representación de los números en braille
Principal Es la clase que configura el menú principal y permite que el usuario escoja el módulo que deseé.
signos_mate Clase encargada de configurar el ListView que muestra la representación de los signos matemáticos en braille
Signosmate_ej Clase que se encarga de cargar y evaluar el test correspondiente a los signos matemáticos en Braille.
96
silencios Clase encargada de configurar el ListView que muestra la representación de los silencios musicales en braille
silencios_ej Clase que se encarga de cargar y evaluar el test correspondiente a los silencios musicales en Braille.
Splash Esta clase se encarga de mostrar la animación inicial de la aplicación.
trans_l Clase encargada de configurar el ListView que muestra la transcripción de un texto en braille.
Transcriptor Clase que cuenta con los métodos necesarios para realizar la transcripción de un texto a Braille.
5.2 Descripción de actividades utilizadas.
En la siguiente tabla se encuentra el nombre de la Actividad usada y una breve
descripción de su función.
Tabla 2. Descripción de las Actividades
Actividad Descripción
Principal Esta actividad muestra el menú principal de la aplicación, es decir los módulos con la que esta cuenta.
Ejercicios Actividad encargada de mostrar los test con los que cuenta la aplicación.
musica Muestra el ListView con la representación de las notas musicales en Braille.
Glosario Muestra el ListView con la representación de las Letras en Braille.
signos_mate Muestra el ListView con la representación de los signos matematicos en Braille.
acentos Muestra el ListView con la representación de las vocales con tilde en Braille.
Menuexp Muestra la el ExpandableListView con la información disponible en la app por áreas y temas.
num_ej Muestra el test sobre los números en Braille.
silencios Muestra el ListView con la representación de las notas musicales en Braille.
numeros Muestra el ListView con la representación de los números en Braille.
Transcriptor Actividad en donde se realiza la transcripción de un texto a Braille.
Splash Actividad encargada de mostrar la animación inicial de la app.
silencios_ej Muestra el test sobre los silencios musicales en Braille.
notas_ej Muestra el test sobre las notas musicales en Braille.
signosmate_ej Muestra el test sobre los signos matemáticos en Braille.
cont_ej Muestra el test sobre el nivel de braille actual del usuario.
Aprendizaje Actividad que muestra de forma sencilla información sobre la representación de una serie del lenguaje Braille, de acuerdo al nivel del usuario.
97
5.3 Descripción de recursos adicionales:
5.3.1 carpeta anim: En esta carpeta se encuentra el archivo XML que se encarga
de la animación inicial de la aplicación (animación.xml).
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="3000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
<scale
android:duration="3000"
android:pivotY="50%"
android:pivotX="50%"
android:toXScale="100%"
android:toYScale="100%"/>
</set>
Este código indica que la animación rotara la imagen asociada 360 y tendrá una
escala de 50% a 100% en su tamaño durante 3 segundos.
5.3.2 drawable: En esta carpeta se encuentran almacenadas las imágenes que
son usadas por la aplicación: representación de notas, silencios, números, letras,
signos de puntuación y signos matemáticos en Braille. Además, también se
encuentra el logo de la aplicación y las imágenes empleadas para los módulos.
Para no hacer muy extensa la tabla sólo se describirán los elementos más
relevantes.
98
Tabla 3. Descripción de Imágenes
NOMBRE FIGURA DESCRIPCIÓN
appbraille
Logo de la aplicación,
este será el launcher
que el usuario elegirá
para ingresar al
aplicación.
99
aprendizaje
Está imagen está
presente en el menú
principal, ayuda a
identificar el módulo
de aprendizaje de una
manera más sencilla.
glosario
Está imagen está
presente en el menú
principal y como fondo
de los ListView sobre
alfabeto y acentos,
ayuda a identificar el
módulo de glosario de
una manera más
sencilla.
100
Evaluar
Está imagen está presente en el menú principal y como fondo del ExpandableListView en la actividad ejercicios, ayuda a identificar el módulo de evaluación de una manera más sencilla.
transcribir
Está imagen está presente en el menú principal y como fondo del ListView en la actividad Transcriptor, ayuda a identificar el módulo de Transcripción de una manera más sencilla.
Música
Imagen usada como fondo para los ListView de las actividades música y silencios
101
Números
Imagen usada como fondo para el ListView de la actividad números.
Signos
Imagen usada como fondo para el ListView de la actividad signos_mate.
6. FUNDAMENTOS DE PROGRAMACIÓN:
La aplicación cuenta con cuatro módulos principales (Aprendizaje, Glosario,
Evaluación y Transcriptor).
6.1 Fundamentos modulo Aprendizaje:
Las clases y actividades incluidas dentro de este módulo son las siguientes:
DbHelper
Principal
Aprendizaje
102
6.2 Fundamentos modulo Glosario:
Las clases y actividades incluidas dentro de este módulo son las siguientes:
Principal
Asig_Adapter
DataProvider
Menuexp
Glosario
acentos
musica
silencios
numeros
signos_mate
notas
ítem
6.3 Fundamentos modulo Evaluación:
Las clases y actividades incluidas dentro de este módulo son las siguientes:
Principal
Ejercicios
Asig_Adapter
DbHelper
ExpAdapter
Cont_ej
notas_ej
num_ej
signosmate_ej
silencios_ej
6.4 Fundamentos modulo Transcriptor:
Las clases y actividades incluidas dentro de este módulo son las siguientes:
Principal
Transcriptor
trans_l
6.5 Actividades y clases extra:
La siguiente actividad no está dentro de los 4 módulos anteriores pero es una
parte importante de la aplicación.
103
Splash
7. IMPLEMENTACIÓN DE CÓDIGO DE IMPORTANCIA:
7.1 Clases
7.1.1 acentos:
private List<item> arrayletra = new ArrayList<item>();
Se crea una lista de tipo ítem llamada arrayletra.
Método letras: este método se encarga de añadir un arreglo de tipo itema la lista para que posteriormente el ListView la muestre al usuario.
private void letras() {
arrayletra.add(new item("á", R.drawable.a2));
arrayletra.add(new item("é", R.drawable.e2));
arrayletra.add(new item("í", R.drawable.i2));
arrayletra.add(new item("ó", R.drawable.o2));
arrayletra.add(new item("ú", R.drawable.u2));
arrayletra.add(new item("ü", R.drawable.u3));
}
Método verletra: este método configura el listview lista_acentos con los
parámetros establecidos por la Clase privada MyListAdapter.
private void verletra() {
ArrayAdapter<item> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.lista_acentos);
list.setAdapter(adapter);
}
MyListAdapter: Clase Privada cuya función es configurar la forma en que se va a
distribuir la información que se deseé colocar en el ListView, como constructor
recibe la clase padre, el layout al que hace referencia y la lista de tipo ítem.
Se usan los métodos getimg y getop para que los elementos del layout muestren
la información como si fueran un solo elemento dentro del ListView.
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(acentos.this, R.layout.item_view, arrayletra);
}
public View getView(int position, View ConvertView, ViewGroup parent)
{
View itemView = ConvertView;
104
if (itemView == null)
itemView = getLayoutInflater().inflate(R.layout.item_view,
parent, false);
item letra_act = arrayletra.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.imagen);
ImageView.setImageResource(letra_act.getimg());
TextView letrat
=(TextView)itemView.findViewById(R.id.Text_letra);
letrat.setText(letra_act.getop());
return itemView;
}
}
Nota: Estos métodos están presentes en otras clases, así que no se considera
necesario volver a explicarlos ya que los cambios son muy insignificantes.
7.1.2 Aprendizaje:
ImageButton Atras, Siguiente;
TextView Text;
ImageView Imagen;
Se declaran dos botones, un Textview y un Imageview para llamarlos más adelante sin problemas.
onCreate: cuando la actividad se ejecuta inicialmente se realiza una consulta en la
base de datos Sqlite para obtener el nivel actual del usuario.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aprendizaje);
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Usuario where Nivel=1";
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
niv=c.getInt(1);
Atras = (ImageButton)findViewById(R.id.Anterior);
Siguiente = (ImageButton)findViewById(R.id.siguiente);
Text = (TextView)findViewById(R.id.text_ap);
Imagen= (ImageView)findViewById(R.id.image_ap);
poner_letras(niv);
findViewById(R.id.Regresar).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
105
startActivity(new Intent(Aprendizaje.this, Principal.class));
Aprendizaje.super.finish();
}
});
Atras.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (p > 1){
p = p - 1;
poner_letras(niv);}
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
avanzar();
}
});
}
poner_letras:este método recibe como parámetro el nivel actual del usuario, para
obtener la información pertinente para la serie que se encuentre estudiando en
ese momento. Se realiza una consulta de acuerdo al nivel (niv) y el número de
pregunta (p).
public void poner_letras(int niv){
String texto = null,Ruta = null;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Braille where Nivel="+niv+" and
NText="+p;
Cursor c = db.rawQuery(Query,null);
c.moveToFirst();
texto=c.getString(1);
Ruta=c.getString(2);
Text.setText(texto);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName , "drawable",
getPackageName());
Imagen.setImageResource(resID);
c.close();
db.close();
}
avanzar: ya que cada nivel tiene un número diferente de preguntas, se realiza una
comprobación para saber en qué nivel está el usuario y no tener errores con las
consultas. Se aumenta el valor de p para que el método poner_letras busque el
siguiente registro y lo muestre.
106
public void avanzar(){
if(niv==1){
if (p <= 11)
p = p + 1;
if (p < 13)
poner_letras(niv);}
if(niv==2){
if (p <= 9)
p = p + 1;
if (p < 11)
poner_letras(niv);}
if(niv==3){
if (p <= 11)
p = p + 1;
if (p < 12)
poner_letras(niv);}
if(niv==4){
if (p <= 3)
p = p + 1;
if (p < 4)
poner_letras(niv);}
if(niv==5){
if (p <= 11)
p = p + 1;
if (p < 12)
poner_letras(niv);}
}
7.1.3 Asig_Adapter:
getGroupview: método que se encarga de configurar la vista del parent en el
ExpandableListView, usa el child_layout y toma el elemento Child_Text para
mostrar el nombre del parent.
public View getGroupView(int groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
String group_title=(String) getGroup(groupPosition);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.child_layout,parent,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setTypeface(null, Typeface.BOLD);
letrat.setText(group_title);
return convertView;
107
}
getChildView: método que se encarga de configurar la vista del Child en el ExpandableListView, usa el child_layout y toma el elemento Child_Text para mostrar el nombre del child. @Override
public View getChildView(int parent, int child, boolean isLastChild, View
convertView, ViewGroup parentView) {
String Child_title= (String)getChild(parent,child);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.child_layout,parentView,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setText(Child_title);
return convertView;
}
7.1.4 Menuexp:
En este evento, se realiza la comunicación entre Actividades, de acuerdo a el child
que haya seleccionado el usuario, la app lo dirige a una actividad.
Exp_list.setOnChildClickListener(new
ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int
groupPosition, int childPosition, long id) {
if (groupPosition == 2 && childPosition == 0) {
finish();
startActivity(new Intent(Menuexp.this, Glosario.class));}
if (groupPosition == 2 && childPosition == 1) {
finish();
startActivity(new Intent(Menuexp.this, acentos.class));}
if (groupPosition == 0 && childPosition == 0) {
finish();
startActivity(new Intent(Menuexp.this, numeros.class));}
if (groupPosition == 0 && childPosition == 1) {
finish();
startActivity(new Intent(Menuexp.this, signos_mate.class));}
if (groupPosition == 1 && childPosition == 0) {
finish();
startActivity(new Intent(Menuexp.this, musica.class));}
if (groupPosition == 1 && childPosition == 1) {
finish();
startActivity(new Intent(Menuexp.this, silencios.class));}
return false;
108
}
});
7.1.5 notas_ej:
En este evento se llama al método poner_letras del cual se habló anteriormente y
al método analizar respuestas, primero se comprueba que al menos un
radiobutton esté seleccionado; luego se procede a analizar las respuestas.
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if((r1.isChecked()==false)&&(r2.isChecked()==false)&&(r3.isChecked()==fal
se)&&(r4.isChecked()==false))
Toast.makeText(getApplicationContext(), "Selecciona una
Respuesta", Toast.LENGTH_LONG).show();
else{
if(p<11)
analizarrespuestas(Resp);
p=p+1;
if(p<11)
poner_letras(niv);
if(p==11){
if(aciertos>=4)
Toast.makeText(getApplicationContext(), "Tuviste
"+aciertos+" aciertos buen trabajo :D", Toast.LENGTH_LONG).show();
if(aciertos<=3)
Toast.makeText(getApplicationContext(), "Tuviste
"+aciertos+" aciertos, estudia un poco más :C",
Toast.LENGTH_LONG).show();
startActivity(new
Intent(notas_ej.this,Ejercicios.class));
notas_ej.super.finish();}
if(p==10) {
Siguiente.setText("Terminar");}}
}
});
analizarrespuestas:aquí se comprueba si la opción del radiobutton seleccionado
es correcta o incorrecta, para luego ser analizada y determinar su se regresa o
avanza nivel, al usuario.
private void analizarrespuestas(String Resp) {
if(r1.isChecked())
if(Resp.equalsIgnoreCase((String) r1.getText()))
aciertos=aciertos+1;
if(r2.isChecked())
if(Resp.equalsIgnoreCase((String) r2.getText()))
aciertos=aciertos+1;
if(r3.isChecked())
if(Resp.equalsIgnoreCase((String) r3.getText()))
aciertos=aciertos+1;
if(r4.isChecked())
109
if(Resp.equalsIgnoreCase((String) r4.getText()))
aciertos=aciertos+1;
}
7.1.6 Splash: en este método se hace un llamado al archivo animación.xml para
que realice la animación de esta acividad y una vez termine pase a la actividad
Principal.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
final ImageView ImageView= (ImageView) findViewById(R.id.img_anim);
final Animation animation =
AnimationUtils.loadAnimation(getBaseContext(),R.anim.animacion);
final Animation animation2 =
AnimationUtils.loadAnimation(getBaseContext(),R.anim.abc_fade_out);
ImageView.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
ImageView.startAnimation(animation2);
finish();
startActivity(new Intent(Splash.this, Principal.class));
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
7.1.7 Transcriptor: En el siguiente método se toma el texto digitado en el edittext,
luego se divide con la función substring para comparar letra por letra y así realizar
una transcripción del lenguaje.
private void img(String dato) {
int let=dato.length();
String car="";
arraynotas.clear();
for (int i=0;i<let;i++){
if(i!=let-1)
car=dato.substring(i,i+1);
if(i==let-1)
car=dato.substring(let-1);
if(car.equalsIgnoreCase(" ")||car.equalsIgnoreCase(""))
arraynotas.add(new trans_l(R.drawable.esp));
if(car.equalsIgnoreCase("a"))
arraynotas.add(new trans_l(R.drawable.a));
if(car.equalsIgnoreCase("b"))
110
arraynotas.add(new trans_l(R.drawable.b));
if(car.equalsIgnoreCase("c"))
arraynotas.add(new trans_l(R.drawable.c));
if(car.equalsIgnoreCase("d"))
arraynotas.add(new trans_l(R.drawable.d));
if(car.equalsIgnoreCase("e"))
arraynotas.add(new trans_l(R.drawable.e));
if(car.equalsIgnoreCase("f"))
arraynotas.add(new trans_l(R.drawable.f));
if(car.equalsIgnoreCase("g"))
arraynotas.add(new trans_l(R.drawable.g));
if(car.equalsIgnoreCase("h"))
arraynotas.add(new trans_l(R.drawable.h));
if(car.equalsIgnoreCase("i"))
arraynotas.add(new trans_l(R.drawable.i));
if(car.equalsIgnoreCase("j"))
arraynotas.add(new trans_l(R.drawable.j));
if(car.equalsIgnoreCase("k"))
arraynotas.add(new trans_l(R.drawable.k));
if(car.equalsIgnoreCase("l"))
arraynotas.add(new trans_l(R.drawable.l));
if(car.equalsIgnoreCase("m"))
arraynotas.add(new trans_l(R.drawable.m));
if(car.equalsIgnoreCase("n"))
arraynotas.add(new trans_l(R.drawable.n));
if(car.equalsIgnoreCase("o"))
arraynotas.add(new trans_l(R.drawable.o));
if(car.equalsIgnoreCase("p"))
arraynotas.add(new trans_l(R.drawable.p));
if(car.equalsIgnoreCase("q"))
arraynotas.add(new trans_l(R.drawable.q));
if(car.equalsIgnoreCase("r"))
arraynotas.add(new trans_l(R.drawable.r));
if(car.equalsIgnoreCase("s"))
arraynotas.add(new trans_l(R.drawable.s));
if(car.equalsIgnoreCase("t"))
arraynotas.add(new trans_l(R.drawable.t));
if(car.equalsIgnoreCase("u"))
arraynotas.add(new trans_l(R.drawable.u));
if(car.equalsIgnoreCase("v"))
arraynotas.add(new trans_l(R.drawable.v));
if(car.equalsIgnoreCase("w"))
arraynotas.add(new trans_l(R.drawable.w));
if(car.equalsIgnoreCase("x"))
arraynotas.add(new trans_l(R.drawable.x));
if(car.equalsIgnoreCase("y"))
arraynotas.add(new trans_l(R.drawable.y));
if(car.equalsIgnoreCase("z"))
arraynotas.add(new trans_l(R.drawable.z));}
}
7.1.8 DbHelper:
public static final String DB_NAME= "Braille.sqlite";
Instrucción para establecer el nombre de la base de datos.
private static final int DB_SCHEME_VERSION= 1;
111
Versión de la base de datos.
Instrucciones para crear tablas:
String Crea_Us="Create table Usuario (Nivel integer primary key, Niv
integer not null);";
String Crea_Silencio="Create table Silencio (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_Num="Create table Numero (NPreg integer primary key, Pregunta
text not null, Ruta text not null,Op text not null, Respuesta text not
null);";
String Crea_Signos="Create table Signos (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_Notas="Create table Notas (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_PBraille="Create table PBraille (Nivel integer, Pregunta
text, Ruta text, Op text, NPreg integer, Respuesta text);";
String Crea_Braille="Create table Braille (Nivel integer, Texto text,
Ruta text, NText integer);";
Instrucciones para insertar los datos:
String Ins_Us="insert into Usuario values (1,1);";
String Ins_Num="insert into Numero values(1,'Selecciona el número que
está representado en Braille','num1','1 5 7 8','1'),(2,'Selecciona el
número que está representado en Braille','num6','4 5 6
7','6'),(3,'Selecciona el número que está representado en
Braille','num9','7 9 5 2','9'),(4,'Selecciona el número que está
representado en Braille','num0','5 3 7 0','0'),(5,'Selecciona el número
que está representado en Braille','num5','0 5 9 8','5'),(6,'Selecciona el
número que está representado en Braille','num4','1 6 4
9','4'),(7,'Selecciona el número que está representado en
Braille','num2','9 2 7 6','2'),(8,'Selecciona el número que está
representado en Braille','num34','24 34 73 69','34'),(9,'Selecciona el
número que está representado en Braille','num25','19 20 25
78','25'),(10,'Selecciona el número que está representado en
Braille','num89','89 24 78 62','89')";
String Ins_Sig="insert into Signos values(1,'Qué signo matemático está
representado en Braille?','divicion','÷ = > +','÷'),(2,'Qué signo
matemático está representado en Braille?','igual','÷ < = +/-
','='),(3,'Qué signo matemático está representado en
Braille?','masmenos','+ +/- - X','+/-'),(4,'Qué signo matemático está
representado en Braille?','mayorque','> + = -','>'),(5,'Qué signo
matemático está representado en Braille?','menorque','+ < ÷
X','<'),(6,'Qué signo matemático está representado en
Braille?','multiplicacion','< X +/- >','X'),(7,'Qué signo matemático está
representado en Braille?','noigual','>< +/- + -','><'),(8,'Qué signo
matemático está representado en Braille?','resta','÷ + - X','-'),(9,'Qué
signo matemático está representado en Braille?','suma','+ +/- ÷
X','+');";
String Ins_Nota="insert into Notas values(1,'Qué nota músical está
representada?','cr','Do Sol Re Mi','Do'),(2,'Qué nota músical está
representada?','dr','Mi Do Re La','Re'),(3,'Qué figura de Do está
112
representada?','cb','Redonda Blanca Corchea Negra','Blanca'),(4,'Qué nota
músical está representada?','fr','La Si Re Fa','Fa'),(5,'Qué figura de Mi
está representada?','ec','Blanca Corchea Negra
Redonda','Corchea'),(6,'Qué nota músical está representada?','br','La Si
Do Re','Si'),(7,'Qué figura de La está representada?','an','Fusa Blanca
Semifusa Corchea','Semifusa'),(8,'Qué nota músical está
representada?','ar','Si Mi La Do','La'),(9,'Qué figura de Sol está
representada?','gb','Negra Fusa Redonda Corchea','Fusa'),(10,'Qué nota
músical está representada?','gr','La Re Sol Mi','Sol');";
String Ins_Silencio="insert into Silencio values(1,'Qué silencio está
representado?','sin','negra blanca redonda fusa','negra'),(2,'Qué
silencio está representado?','sib','semifusa fusa garrapatea
negra','fusa'),(3,'Qué silencio está representado?','sir','corchea negra
redonda blanca','redonda'),(4,'Qué silencio está
representado?','sic','semicorchea fusa negra corchea','corchea'),(5,'En
este compás 4/4 qué silencio hay?','mu1','negra blanca redonda
semifusa','blanca'),(6,'En este compás 4/4 qué silencio
hay?','mu2','corchea negra blanca fusa','corchea');";
String Ins_PBraille1="insert into PBraille values(1,'Qué letra representa
este código en Braille?','a','a b c d',1,'a'),(1,'Qué letra representa
este código en Braille?','d','j i b d',2,'d'),(1,'Qué letra representa
este código en Braille?','j','f c j k',3,'j'),(1,'Qué letra representa
este código en Braille?','f','f i c a',4,'f'),(1,'Qué letra representa
este código en Braille?','h','m h i g',5,'h'),(1,'Qué palabra está
representada en Braille?','hija','dado caja hija pato',6,'hija'),(1,'Qué
letra representa este código en Braille?','i','j i k o',7,'i'),(1,'Qué
palabra está representada en Braille?','caja','pato caja casa
dado',8,'caja'),(1,'Qué letra representa este código en Braille?','g','k
i g j',9,'g'),(1,'Qué palabra está representada en
Braille?','abeja','adiós abeja vamos habla',10,'abeja');";
String Ins_PBraille2="insert into PBraille values(2,'Qué letra representa
este código en Braille?','k','j n k o',1,'k'),(2,'Qué letra representa
este código en Braille?','n','n p o d',2,'n'),(2,'Qué letra representa
este código en Braille?','p','n p l k',3,'p'),(2,'Qué letra representa
este código en Braille?','r','k o r a',4,'r'),(2,'Qué letra representa
este código en Braille?','t','n k o t',5,'t'),(2,'Qué palabra está
representada en Braille?','mono','coco mono cama lodo',6,'mono'),(2,'Qué
letra representa este código en Braille?','l','p l k o',7,'l'),(2,'Qué
palabra está representada en Braille?','moto','mono lodo moto
dado',8,'moto'),(2,'Qué palabra está representada en
Braille?','protesta','protesta molestia protegen
pasado',9,'protesta'),(2,'Qué palabra está representada en
Braille?','camino','latigo camino carrito casco',10,'camino');";
String Ins_PBraille3="insert into PBraille values(3,'Qué letra representa
este código en Braille?','u','x u k o',1,'u'),(3,'Qué letra representa
este código en Braille?','x','a p x t',2,'x'),(3,'Qué letra representa
este código en Braille?','z','n z o k',3,'z'),(3,'Qué letra representa
este código en Braille?','e2','k o r é',4,'é'),(3,'Qué letra representa
este código en Braille?','y','n k y t',5,'y'),(3,'Qué palabra está
representada en Braille?','zorro','coco zorro potro
lodo',6,'zorro'),(3,'Qué palabra está representada en
Braille?','tuba','ala fruta sala tuba',7,'tuba'),(3,'Qué palabra está
representada en Braille?','xilofono','camiones xilófono edificio
páginas',8,'xilófono'),(3,'Qué palabra está representada en
Braille?','mama','mamá coco papá lata',9,'mamá'),(3,'Qué palabra está
representada en Braille?','uva','ala uva iva ele',10,'uva');";
String Ins_PBraille4="insert into PBraille values(4,'Qué signo de
113
puntuación está representado?','coma','coma dos_puntos punto
punto_y_coma',1,'coma'),(4,'Qué signo de puntuación está
representado?','puntcom','coma punto_y_coma admiración
pregunta',2,'punto_y_coma'),(4,'Qué signo de puntuación está
representado?','dospunt','punto punto_y_coma dos_puntos
coma',3,'dos_puntos'),(4,'Qué representa este símbolo?','suma','cursiva
suma igual grados',4,'suma'),(4,'Qué signo de puntuación está
representado?','interrogacion','punto admiración comillas
interrogación',5,'interrogación'),(4,'Qué signo de puntuación está
representado?','admiracion','admiración pregunta comillas
coma',6,'admiración'),(4,'Qué representa este símbolo?','igual','suma
coma igual cursiva',7,'igual'),(4,'Qué signo de puntuación está
representado?','comillas','comillas admiración pregunta
coma',8,'comillas'),(4,'Qué representa este símbolo?','cursiva','igual
suma cursiva grados',9,'cursiva'),(4,'Qué representa este
símbolo?','grados','igual grados cursiva suma',10,'grados');";
String Ins_PBraille5="insert into PBraille values(5,'Qué letra representa
este código en Braille?','n2','ñ m ü w',1,'ñ'),(5,'Qué letra representa
este código en Braille?','u3','x w ü t',2,'ü'),(5,'Qué letra representa
este código en Braille?','w','n w ü ñ',3,'w'),(5,'Qué palabra está
representada en Braille?','espanol','camiones edificio español
caminos',4,'español'),(5,'Qué palabra está representada en
Braille?','wilson','wilson cursiva walter bosque',5,'wilson'),(5,'Qué
palabra está representada en Braille?','pinguino','cigüeña pingüino
vestidor página',6,'pingüino'),(5,'Qué palabra está representada en
Braille?','tuba','ala fruta sala tuba',7,'tuba'),(5,'Qué palabra está
representada en Braille?','xilofono','camiones xilófono edificio
páginas',8,'xilófono'),(5,'Qué palabra está representada en
Braille?','name','ñame casa papá walt',9,'ñame'),(5,'Qué palabra está
representada en Braille?','ala','ala uva iva ele',10,'ala');";
String Ins_Braille1="insert into Braille values(1,'El signo generador de
braille es una cajita cómo esta, la cual se compone de 6 puntos en este
orden','gen',1),(1,'para la 1º serie se utilizan únicamente los cuatro
puntos superiores (1, 2, 4, 5) y con ellos se forman las diez primeras
letras del alfabeto','',2),(1,'Esta es la representación de la letra:
a','a',3),(1,'Esta es la representación de la letra: b','b',4),(1,'Esta
es la representación de la letra: c','c',5),(1,'Esta es la representación
de la letra: d','d',6),(1,'Esta es la representación de la letra:
e','e',7),(1,'Esta es la representación de la letra: f','f',8),(1,'Esta
es la representación de la letra: g','g',9),(1,'Esta es la representación
de la letra: h','h',10),(1,'Esta es la representación de la letra:
i','i',11),(1,'Esta es la representación de la letra: j','j',12);";
String Ins_Braille2="insert into Braille values(2,'La 2º serie se forma
con los puntos de la primera serie, añadiéndoles el punto número 3 y,
así, obtenemos las siguientes letras, a excepción de la letra ñ (conviene
recordar aquí que Luis Braille era francés)','',1),(2,'Esta es la
representación de la letra: k','k',2),(2,'Esta es la representación de la
letra: l','l',3),(2,'Esta es la representación de la letra:
m','m',4),(2,'Esta es la representación de la letra: n','n',5),(2,'Esta
es la representación de la letra: o','o',6),(2,'Esta es la representación
de la letra: p','p',7),(2,'Esta es la representación de la letra:
q','q',8),(2,'Esta es la representación de la letra: r','r',9),(2,'Esta
es la representación de la letra: s','s',10),(2,'Esta es la
representación de la letra: t','t',11);";
String Ins_Braille3="insert into Braille values(3,'la 3ª serie se forma
con los puntos de la 2ª serie, añadiendo el punto número
6','',1),(3,'Esta es la representación de la letra: u','u',2),(3,'Esta es
114
la representación de la letra: v','v',3),(3,'Esta es la representación de
la letra: x','x',4),(3,'Esta es la representación de la letra:
y','y',5),(3,'Esta es la representación de la letra: z','z',6),(3,'Esta
es la representación de la letra: á','a2',7),(3,'Esta es la
representación de la letra: é','e2',8),(3,'Esta es la representación de
la letra: í','i2',9),(3,'Esta es la representación de la letra:
ó','o2',10),(3,'Esta es la representación de la letra: ú','u2',11);";
String Ins_Braille4="insert into Braille values(4,'En la 4ª serie están
los elementos de la 1ª serie, añadiendo el punto número 6. En esta serie
se forman signos propios del francés, por lo que aquí sólo presentamos
las letras que nos interesan en español','',1),(4,'Esta es la
representación de la letra: ñ','n2',2),(4,'Esta es la representación de
la letra: ü','u3',3),(4,'Esta es la representación de la letra:
w','w',4);";
String Ins_Braille5="insert into Braille values(5,'En la 5ª serie tenemos
los signos de la primera serie, pero utilizando los puntos de la mitad
inferior de la celdilla o cajetín. Así, conseguimos los signos de
puntuación','',1),(5,'Para representar la coma(,) se usa este
signo','coma',2),(5,'Para representar punto y coma(;) se usa este
signo','puntcom',3),(5,'Para representar los dospuntos(:) se usa este
signo','dospunt',4),(5,'Para representar el signo de la suma(+) se usa
este signo','suma',5),(5,'Los signos de interrogación(¿?) se representan
como se aprecia en la imagen. Se ponen al inicio y al final de la frase,
tal como se hace en tinta','interrogacion',6),(5,'Los signos de
admiración(¡!) se representan como se aprecia en la imagen. Se ponen al
inicio y al final de la frase','admiracion',7),(5,'El signo igual(=) se
representa de la siguiente manera','igual',8),(5,'Las Comillas se
representan como se aprecia en la imagen, van al inicio y al final de la
frase','comillas',9),(5,'Esta imagen representa la escritura en cursiva,
se usa para resaltar alguna palabra o frase de
interés','cursiva',10),(5,'Para representar los grados(°) se usa el
siguiente símbolo','grados',11);";
onCreate: en este método se ejecutan los Query de las instrucciones anteriores,
de no ser así la base de datos no sería creada. Recibe como parámetro un objeto
de tipo SQLiteDatabase, se usa la palabra reservada execSQL para ejecutar las
instrucciones anteriores y crear la base de datos.
public void onCreate(SQLiteDatabase db) {
db.execSQL(Crea_Us);
db.execSQL(Crea_PBraille);
db.execSQL(Crea_Silencio);
db.execSQL(Crea_Num);
db.execSQL(Crea_Signos);
db.execSQL(Crea_Notas);
db.execSQL(Crea_Braille);
db.execSQL(Ins_Us);
db.execSQL(Ins_Silencio);
db.execSQL(Ins_Num);
db.execSQL(Ins_Sig);
db.execSQL(Ins_Nota);
db.execSQL(Ins_PBraille1);
db.execSQL(Ins_PBraille2);
db.execSQL(Ins_PBraille3);
115
db.execSQL(Ins_PBraille4);
db.execSQL(Ins_PBraille5);
db.execSQL(Ins_Braille1);
db.execSQL(Ins_Braille2);
db.execSQL(Ins_Braille3);
db.execSQL(Ins_Braille4);
db.execSQL(Ins_Braille5);}
116
MANUAL DEL USUARIO.
APLICACIÓN MÓVIL PARA EL APRENDIZAJE DEL LENGUAJE BRAILLE Y LA
SIGNOGRAFÍA BÁSICA USADA EN LAS ÁREAS DE MATEMÁTICAS Y
MÚSICA EN PERSONAS VIDENTES
ARNOLD STIVEN ALFONSO CONTRERAS
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS
FACULTAD TECNOLOGICA
TECNOLOGIA EN SISTEMATIZACION DE DATOS
BOGOTA
2016
CONTENIDO.
117
Contenido
1. INTRODUCCION. .......................................................................................................................... 118
2. REQUERIMIENTOS DEL DISPOSITIVO. ......................................................................................... 118
3. INSTALACION DE LA APLICACIÓN. ............................................................................................... 118
4. NAVEGANDO POR APPBRAILLE ................................................................................................... 123
5. Módulos AppBraille ..................................................................................................................... 124
5.1 Módulo De Aprendizaje: ....................................................................................................... 124
5.2 Módulo De Glosario: ............................................................................................................. 124
5.3 Módulo De Evaluación: ......................................................................................................... 126
5.4 Módulo De Transcripción: ..................................................................................................... 127
118
1. INTRODUCCION.
AppBraille es una aplicación para dispositivos móviles con sistema operativo
Android desde API 19 o superior, aunque tambien se puede usar en dispositivos
desde el API 16; esta aplicación se realizó para que los docentes tengan una
herramienta para poder realizar material a sus estudiantes invidentes.
Además, si pensamos en la educación inclusiva lo ideal sería que una persona
con discapacidad visual pueda realizar sus estudios donde haya un ambiente
propicio y esto se puede lograr si sus compañeros saben algo de lenguaje Braille
porque así el menor no se sentiría excluido.
2. REQUERIMIENTOS DEL DISPOSITIVO.
HARDWARE SOTWARE
Pantalla 768x1280 -dpi Memoria: 5MB libres para su instalación. RAM: 1GB
Sistema Operativo: Android 4.4.4(API 19) o superior posterior hasta Android 4.1.1 (API 16) Aplicaciones: Antivirus. (Opcional) Procesador de texto Visor de imágenes Lector de archivos PDF
3. INSTALACION DE LA APLICACIÓN.
Esta aplicación se puede descargar compartiendo el apk por medio de bluetooth,
correo electrónico o desde un computador conectando el dispositivo y siguiendo
estos pasos:
119
Imagen 1 – Carpeta descargas
Fuente: Autor.
Mover el apk a la carpeta Descargas de su dispositivo.
Imagen 2 – Selección del apk
Fuente: Autor.
120
Imagen 3 - Copia apk
Fuente: Autor.
En el dispositivo busque la opción de “Admin. De archivos” e ingrese
Imagen 4 – Admin. De Archivos
Fuente: Autor.
121
Ubique la carpeta “Descargas” allí encontrara el apk que acabó de copiar al
dispositivo
Imagen 5- Ubicar apk
Fuente: Autor
Al oprimir en el apk le preguntara si desea instalar la aplicación, cuando acepte
espere un momento mientras se instala, será notificado cuando finalice la
instalación
Imagen 6 – Confirmación e instalación de la aplicación
Fuente: Autor
122
Cuando explore el menú del dispositivo, encontrara la aplicación
Imagen 7- Ubicar aplicación Instalada
Fuente: Autor.
123
4. NAVEGANDO POR APPBRAILLE
Al ingresar a AppBraille encontrará una animación que le da la bienvenida a la
aplicación.
Imagen 8 – animación inicio de la aplicación.
Fuente: Autor.
El menú principal consta de cuatro opciones, la primera corresponde al módulo
“Aprendizaje” donde podrá aprender el lenguaje según la metodología Bliseo, es
decir, aprenderá por series; la segunda opción, “Glosario” es donde podrá
consultar la documentación disponible sobre el lenguaje Braille que tiene la
aplicación, el tercer módulo será el de evaluación donde podrá encontrar
“exámenes” sobre su nivel de Braille y pruebas sobre conocimiento Música y
Matemáticas según lo proporcionado por el glosario. Por último, encontrará el
módulo de transcripción, donde podrá transcribir un texto a lenguaje Braille.
Imagen 9 - Módulos Aplicación
Fuente: Autor.
124
5. Módulos AppBraille
5.1 Módulo De Aprendizaje:
Este módulo está asociado con una base de datos donde se encuentra la
información correspondiente a cada serie, para un aprendizaje más ameno, se
optó por la metodologia Bliseo la cual enseña como primer medida el signo
generador, luego se aprende el lenguaje a travez de 5 series; el usuario empieza
en el nivel 1 hasta llegar al 5, para avanzar debe aprobar el examen de cada nivel.
Imagen 10- Módulo De Aprendizaje
Fuente: Autor.
5.2 Módulo De Glosario:
En este módulo de encuentra información referente al lenguaje Braille, se divide en tres bloques:
Alfabeto, Música y Matemáticas; los cuales contienes temas relacionados con cada área para que
así sea más fácil acceder a esa información.
125
Imagen 11- Módulo De Glosario
Fuente: Autor.
Cuando se elige uno de esos temas, se re direcciona a una actividad donde se muestra la
información que el usuario escogió.
Imagen 12- Actividades Con Información de los temas
Fuente: Autor.
126
5.3 Módulo De Evaluación:
En este módulo se encuentran exámenes para evaluar el nivel de Braille y otros para practicar lo
aprendido en el glosario con respecto a las áreas de música y matemáticas. Para que el usuario
avance de nivel en Braille debe aprobar el examen correspondiente a ese nivel, pero en las otras
áreas no implica nada, sólo son ejercicios para practicar.
Imagen 13- Módulo De Evaluación
Fuente: Autor.
Cada opción envía al Usuario a una actividad con un examen para evaluar el tema que escogió, en
el caso de “Evaluar Nivel” el examen será sobre el nivel en el que se encuentre el usuario en ese
momento, si falla regresará al nivel anterior y si aprueba avanzará de nivel.
Imagen 14 – Examenes
127
Fuente: Autor.
5.4 Módulo De Transcripción:
En este módulo el usuario puede hacer transcripción de texto a braille, sólo debe escribir texto en
el campo o pegarlo desde algún lugar y oprimir el botón transcribir para que la aplicación
convierta el texto en lenguaje Braille.
Imagen 15- Módulo De Transcripción
Fuente: Autor.
128
CÓDIGO FUENTE
APLICACIÓN MÓVIL PARA EL APRENDIZAJE DEL LENGUAJE BRAILLE Y LA
SIGNOGRAFÍA BÁSICA USADA EN LAS ÁREAS DE MATEMÁTICAS Y
MÚSICA EN PERSONAS VIDENTES
ARNOLD STIVEN ALFONSO CONTRERAS
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS
FACULTAD TECNOLOGICA
TECNOLOGIA EN SISTEMATIZACION DE DATOS
BOGOTA
2016
129
Contenido
1. Clases ....................................................................................................................................... 131
acentos ................................................................................................................................ 131
Aprendizaje ......................................................................................................................... 133
Asig_Adapter ....................................................................................................................... 135
cont_ej ................................................................................................................................. 137
DataProvider ....................................................................................................................... 139
DbHelper ............................................................................................................................. 140
Ejercicios .............................................................................................................................. 140
ExpAdapter .......................................................................................................................... 146
Glosario ............................................................................................................................... 146
item ..................................................................................................................................... 148
Menuexp ............................................................................................................................. 149
Música ................................................................................................................................. 150
Notas ................................................................................................................................... 153
notas_ej ............................................................................................................................... 153
num_ej ................................................................................................................................ 155
números .............................................................................................................................. 158
Principal ............................................................................................................................... 159
signos_mate ........................................................................................................................ 159
signosmate_ej ..................................................................................................................... 163
silencios ............................................................................................................................... 165
silencios_ej .......................................................................................................................... 167
Splash .................................................................................................................................. 169
trans_l .................................................................................................................................. 170
Transcriptor ......................................................................................................................... 170
2. Animación................................................................................................................................ 170
animacion ............................................................................................................................ 182
3. XML .......................................................................................................................................... 182
Activity_acentos .................................................................................................................. 183
130
Activity_aprendizaje ............................................................................................................ 184
Activity_ejercicios ............................................................................................................... 185
Activity_Glosario ................................................................................................................. 185
Activity_menuexp ............................................................................................................... 186
Activity_notas ...................................................................................................................... 187
Activity_numeros ................................................................................................................ 187
Activity_principal ................................................................................................................. 188
Activity_signos_mate .......................................................................................................... 189
Activity_silencios ................................................................................................................. 189
Activity_transcriptor ........................................................................................................... 190
Child_layout ........................................................................................................................ 190
Content_ejercicios............................................................................................................... 191
Content_glosario ................................................................................................................. 192
Content_notas ..................................................................................................................... 193
Content_numeros ............................................................................................................... 193
Content_principal ................................................................................................................ 194
Content_transcriptor .......................................................................................................... 194
Eje_lay ................................................................................................................................. 196
Ítem_menu .......................................................................................................................... 198
Ítem_view ............................................................................................................................ 198
Music_menu ........................................................................................................................ 199
Splash_screen ...................................................................................................................... 199
Transc_layout ...................................................................................................................... 200
131
1. Clases (JAVA)
About package com.example.arnold.appbraille;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class about extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
findViewById(R.id.imageButton3).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(about.this, Principal.class));
about.super.finish();
}
});
}
}
acentos package com.example.arnold.appbraille;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class acentos extends AppCompatActivity {
132
private List<item> arrayletra = new ArrayList<item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_acentos);
letras();
verletra();
findViewById(R.id.imageButton10).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(acentos.this, Menuexp.class));
acentos.super.finish();
}
});
}
private void letras() {
arrayletra.add(new item("á", R.drawable.a2));
arrayletra.add(new item("é", R.drawable.e2));
arrayletra.add(new item("í", R.drawable.i2));
arrayletra.add(new item("ó", R.drawable.o2));
arrayletra.add(new item("ú", R.drawable.u2));
arrayletra.add(new item("ü", R.drawable.u3));
}
private void verletra() {
ArrayAdapter<item> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.lista_acentos);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(acentos.this, R.layout.item_view, arrayletra);
}
public View getView(int position, View ConvertView, ViewGroup parent) {
133
View itemView = ConvertView;
if (itemView == null)
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
item letra_act = arrayletra.get(position);
ImageView ImageView= (ImageView) itemView.findViewById(R.id.imagen);
ImageView.setImageResource(letra_act.getimg());
TextView letrat =(TextView)itemView.findViewById(R.id.Text_letra);
letrat.setText(letra_act.getop());
return itemView;
}
}
}
Aprendizaje package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
134
public class Aprendizaje extends AppCompatActivity {
ImageButton Atras, Siguiente;
TextView Text;
ImageView Imagen;
int p=1,niv=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aprendizaje);
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this,
1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Usuario where Nivel=1";
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
niv=c.getInt(1);
Atras = (ImageButton)findViewById(R.id.Anterior);
Siguiente = (ImageButton)findViewById(R.id.siguiente);
Text = (TextView)findViewById(R.id.text_ap);
Imagen= (ImageView)findViewById(R.id.image_ap);
poner_letras(niv);
findViewById(R.id.Regresar).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Aprendizaje.this,
Principal.class));
Aprendizaje.super.finish();
}
});
Atras.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (p > 1){
p = p - 1;
poner_letras(niv);}
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
avanzar();
}
});
}
public void poner_letras(int niv){
String texto = null,Ruta = null;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this,
1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Braille where Nivel="+niv+" and
NText="+p;
Cursor c = db.rawQuery(Query,null);
c.moveToFirst();
texto=c.getString(1);
135
Ruta=c.getString(2);
Text.setText(texto);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName ,
"drawable", getPackageName());
Imagen.setImageResource(resID);
c.close();
db.close();
}
public void avanzar(){
if(niv==1){
if (p <= 11)
p = p + 1;
if (p < 13)
poner_letras(niv);}
if(niv==2){
if (p <= 9)
p = p + 1;
if (p < 11)
poner_letras(niv);}
if(niv==3){
if (p <= 11)
p = p + 1;
if (p < 12)
poner_letras(niv);}
if(niv==4){
if (p <= 3)
p = p + 1;
if (p < 4)
poner_letras(niv);}
if(niv==5){
if (p <= 11)
p = p + 1;
if (p < 12)
poner_letras(niv);}
}
}
Asig_Adapter package com.example.arnold.appbraille;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
/**
136
* Created by Arnold on 21/02/2016.
*/
public class Asig_Adapter extends BaseExpandableListAdapter{
private Context ctx;
private HashMap<String, List<String>> Asignaturas;
private List<String> Temas;
public Asig_Adapter(Context ctx,HashMap<String, List<String>>
Asignaturas,List<String> Temas){
this.ctx=ctx;
this.Asignaturas=Asignaturas;
this.Temas=Temas;
}
@Override
public int getGroupCount() {
return Temas.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return Asignaturas.get(Temas.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return Temas.get(groupPosition);
}
@Override
public Object getChild(int parent, int child) {
return Asignaturas.get(Temas.get(parent)).get(child);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int parent, int child) {
return child;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
String group_title=(String) getGroup(groupPosition);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
137
convertView=inflater.inflate(R.layout.child_layout,parent,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setTypeface(null, Typeface.BOLD);
letrat.setText(group_title);
return convertView;
}
@Override
public View getChildView(int parent, int child, boolean isLastChild,
View convertView, ViewGroup parentView) {
String Child_title= (String)getChild(parent,child);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.child_layout,parentView,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setText(Child_title);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int
childPosition) {
return true;
}
}
cont_ej package com.example.arnold.appbraille;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
/**
* Created by Arnold on 21/02/2016.
*/
public class Asig_Adapter extends BaseExpandableListAdapter{
private Context ctx;
private HashMap<String, List<String>> Asignaturas;
private List<String> Temas;
138
public Asig_Adapter(Context ctx,HashMap<String, List<String>>
Asignaturas,List<String> Temas){
this.ctx=ctx;
this.Asignaturas=Asignaturas;
this.Temas=Temas;
}
@Override
public int getGroupCount() {
return Temas.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return Asignaturas.get(Temas.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return Temas.get(groupPosition);
}
@Override
public Object getChild(int parent, int child) {
return Asignaturas.get(Temas.get(parent)).get(child);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int parent, int child) {
return child;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
String group_title=(String) getGroup(groupPosition);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.child_layout,parent,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setTypeface(null, Typeface.BOLD);
letrat.setText(group_title);
139
return convertView;
}
@Override
public View getChildView(int parent, int child, boolean isLastChild,
View convertView, ViewGroup parentView) {
String Child_title= (String)getChild(parent,child);
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.child_layout,parentView,false);}
TextView letrat = (TextView)
convertView.findViewById(R.id.Child_Text);
letrat.setText(Child_title);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int
childPosition) {
return true;
}
}
DataProvider package com.example.arnold.appbraille;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by Arnold on 21/02/2016.
*/
public class DataProvider {
public static HashMap<String, List<String>> getinfo() {
HashMap<String, List<String>> Det_asig = new HashMap<>();
List<String> Glosario = new ArrayList<String>();
Glosario.add("Alfabeto");
Glosario.add("Acentos");
List<String> Musica = new ArrayList<String>();
Musica.add("Notas");
Musica.add("Silencios");
List<String> Matematicas = new ArrayList<String>();
Matematicas.add("Números");
Matematicas.add("Signos");
Det_asig.put("Alfabeto", Glosario);
Det_asig.put("Música",Musica);
Det_asig.put("Matemáticas",Matematicas);
140
return Det_asig;
}
}
DbHelper package com.example.arnold.appbraille;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Arnold on 31/01/2016.
*/
public class DbHelper extends SQLiteOpenHelper {
public static final String DB_NAME= "Braille.sqlite";
private static final int DB_SCHEME_VERSION= 1;
String Crea_Us="Create table Usuario (Nivel integer primary key, Niv
integer not null);";
String Crea_Silencio="Create table Silencio (NPreg integer primary
key, Pregunta text not null, Ruta text not null,Op text not null,
Respuesta text not null);";
String Crea_Num="Create table Numero (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_Signos="Create table Signos (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_Notas="Create table Notas (NPreg integer primary key,
Pregunta text not null, Ruta text not null,Op text not null, Respuesta
text not null);";
String Crea_PBraille="Create table PBraille (Nivel integer, Pregunta
text, Ruta text, Op text, NPreg integer, Respuesta text);";
String Crea_Braille="Create table Braille (Nivel integer, Texto text,
Ruta text, NText integer);";
String Ins_Us="insert into Usuario values (1,1),(2,1);";
String Ins_Num="insert into Numero values(1,'Selecciona el número que
está representado en Braille','num1','1 5 7 8','1'),(2,'Selecciona el
número que está representado en Braille','num6','4 5 6
7','6'),(3,'Selecciona el número que está representado en
Braille','num9','7 9 5 2','9'),(4,'Selecciona el número que está
representado en Braille','num0','5 3 7 0','0'),(5,'Selecciona el número
que está representado en Braille','num5','0 5 9 8','5'),(6,'Selecciona el
número que está representado en Braille','num4','1 6 4
9','4'),(7,'Selecciona el número que está representado en
Braille','num2','9 2 7 6','2'),(8,'Selecciona el número que está
representado en Braille','num34','24 34 73 69','34'),(9,'Selecciona el
número que está representado en Braille','num25','19 20 25
78','25'),(10,'Selecciona el número que está representado en
Braille','num89','89 24 78 62','89')";
String Ins_Sig="insert into Signos values(1,'Qué signo matemático
está representado en Braille?','divicion','÷ = > +','÷'),(2,'Qué signo
matemático está representado en Braille?','igual','÷ < = +/-
','='),(3,'Qué signo matemático está representado en
Braille?','masmenos','+ +/- - X','+/-'),(4,'Qué signo matemático está
141
representado en Braille?','mayorque','> + = -','>'),(5,'Qué signo
matemático está representado en Braille?','menorque','+ < ÷
X','<'),(6,'Qué signo matemático está representado en
Braille?','multiplicacion','< X +/- >','X'),(7,'Qué signo matemático está
representado en Braille?','noigual','>< +/- + -','><'),(8,'Qué signo
matemático está representado en Braille?','resta','÷ + - X','-'),(9,'Qué
signo matemático está representado en Braille?','suma','+ +/- ÷
X','+');";
String Ins_Nota="insert into Notas values(1,'Qué nota músical está
representada?','cr','Do Sol Re Mi','Do'),(2,'Qué nota músical está
representada?','dr','Mi Do Re La','Re'),(3,'Qué figura de Do está
representada?','cb','Redonda Blanca Corchea Negra','Blanca'),(4,'Qué nota
músical está representada?','fr','La Si Re Fa','Fa'),(5,'Qué figura de Mi
está representada?','ec','Blanca Corchea Negra
Redonda','Corchea'),(6,'Qué nota músical está representada?','br','La Si
Do Re','Si'),(7,'Qué figura de La está representada?','an','Fusa Blanca
Semifusa Corchea','Semifusa'),(8,'Qué nota músical está
representada?','ar','Si Mi La Do','La'),(9,'Qué figura de Sol está
representada?','gb','Negra Fusa Redonda Corchea','Fusa'),(10,'Qué nota
músical está representada?','gr','La Re Sol Mi','Sol');";
String Ins_Silencio="insert into Silencio values(1,'Qué silencio está
representado?','sin','negra blanca redonda fusa','negra'),(2,'Qué
silencio está representado?','sib','semifusa fusa garrapatea
negra','fusa'),(3,'Qué silencio está representado?','sir','corchea negra
redonda blanca','redonda'),(4,'Qué silencio está
representado?','sic','semicorchea fusa negra corchea','corchea'),(5,'En
este compás 4/4 qué silencio hay?','mu1','negra blanca redonda
semifusa','blanca'),(6,'En este compás 4/4 qué silencio
hay?','mu2','corchea negra blanca fusa','corchea');";
String Ins_PBraille1="insert into PBraille values(1,'Qué letra
representa este código en Braille?','a','a b c d',1,'a'),(1,'Qué letra
representa este código en Braille?','d','j i b d',2,'d'),(1,'Qué letra
representa este código en Braille?','j','f c j k',3,'j'),(1,'Qué letra
representa este código en Braille?','f','f i c a',4,'f'),(1,'Qué letra
representa este código en Braille?','h','m h i g',5,'h'),(1,'Qué palabra
está representada en Braille?','hija','dado caja hija
pato',6,'hija'),(1,'Qué letra representa este código en Braille?','i','j
i k o',7,'i'),(1,'Qué palabra está representada en Braille?','caja','pato
caja casa dado',8,'caja'),(1,'Qué letra representa este código en
Braille?','g','k i g j',9,'g'),(1,'Qué palabra está representada en
Braille?','abeja','adiós abeja vamos habla',10,'abeja');";
String Ins_PBraille2="insert into PBraille values(2,'Qué letra
representa este código en Braille?','k','j n k o',1,'k'),(2,'Qué letra
representa este código en Braille?','n','n p o d',2,'n'),(2,'Qué letra
representa este código en Braille?','p','n p l k',3,'p'),(2,'Qué letra
representa este código en Braille?','r','k o r a',4,'r'),(2,'Qué letra
representa este código en Braille?','t','n k o t',5,'t'),(2,'Qué palabra
está representada en Braille?','mono','coco mono cama
lodo',6,'mono'),(2,'Qué letra representa este código en Braille?','l','p
l k o',7,'l'),(2,'Qué palabra está representada en Braille?','moto','mono
lodo moto dado',8,'moto'),(2,'Qué palabra está representada en
Braille?','protesta','protesta molestia protegen
pasado',9,'protesta'),(2,'Qué palabra está representada en
Braille?','camino','latigo camino carrito casco',10,'camino');";
String Ins_PBraille3="insert into PBraille values(3,'Qué letra
representa este código en Braille?','u','x u k o',1,'u'),(3,'Qué letra
representa este código en Braille?','x','a p x t',2,'x'),(3,'Qué letra
142
representa este código en Braille?','z','n z o k',3,'z'),(3,'Qué letra
representa este código en Braille?','e2','k o r é',4,'é'),(3,'Qué letra
representa este código en Braille?','y','n k y t',5,'y'),(3,'Qué palabra
está representada en Braille?','zorro','coco zorro potro
lodo',6,'zorro'),(3,'Qué palabra está representada en
Braille?','tuba','ala fruta sala tuba',7,'tuba'),(3,'Qué palabra está
representada en Braille?','xilofono','camiones xilófono edificio
páginas',8,'xilófono'),(3,'Qué palabra está representada en
Braille?','mama','mamá coco papá lata',9,'mamá'),(3,'Qué palabra está
representada en Braille?','uva','ala uva iva ele',10,'uva');";
String Ins_PBraille4="insert into PBraille values(4,'Qué letra
representa este código en Braille?','n2','ñ m ü w',1,'ñ'),(4,'Qué letra
representa este código en Braille?','u3','x w ü t',2,'ü'),(4,'Qué letra
representa este código en Braille?','w','n w ü ñ',3,'w'),(4,'Qué palabra
está representada en Braille?','espanol','camiones edificio español
caminos',4,'español'),(4,'Qué palabra está representada en
Braille?','wilson','wilson cursiva walter bosque',5,'wilson'),(4,'Qué
palabra está representada en Braille?','pinguino','cigüeña pingüino
vestidor página',6,'pingüino'),(4,'Qué palabra está representada en
Braille?','tuba','ala fruta sala tuba',7,'tuba'),(4,'Qué palabra está
representada en Braille?','xilofono','camiones xilófono edificio
páginas',8,'xilófono'),(4,'Qué palabra está representada en
Braille?','name','ñame casa papá walt',9,'ñame'),(4,'Qué palabra está
representada en Braille?','ala','ala uva iva ele',10,'ala');";
String Ins_PBraille5="insert into PBraille values(5,'Qué signo de
puntuación está representado?','coma','coma dos_puntos punto
punto_y_coma',1,'coma'),(5,'Qué signo de puntuación está
representado?','puntcom','coma punto_y_coma admiración
pregunta',2,'punto_y_coma'),(5,'Qué signo de puntuación está
representado?','dospunt','punto punto_y_coma dos_puntos
coma',3,'dos_puntos'),(5,'Qué representa este símbolo?','suma','cursiva
suma igual grados',4,'suma'),(5,'Qué signo de puntuación está
representado?','interrogacion','punto admiración comillas
interrogación',5,'interrogación'),(5,'Qué signo de puntuación está
representado?','admiracion','admiración pregunta comillas
coma',6,'admiración'),(5,'Qué representa este símbolo?','igual','suma
coma igual cursiva',7,'igual'),(5,'Qué signo de puntuación está
representado?','comillas','comillas admiración pregunta
coma',8,'comillas'),(5,'Qué representa este símbolo?','cursiva','igual
suma cursiva grados',9,'cursiva'),(5,'Qué representa este
símbolo?','grados','igual grados cursiva suma',10,'grados');";
String Ins_Braille1="insert into Braille values(1,'El signo generador
de braille es una cajita cómo esta, la cual se compone de 6 puntos en
este orden','gen',1),(1,'para la 1º serie se utilizan únicamente los
cuatro puntos superiores (1, 2, 4, 5) y con ellos se forman las diez
primeras letras del alfabeto','',2),(1,'Esta es la representación de la
letra: a','a',3),(1,'Esta es la representación de la letra:
b','b',4),(1,'Esta es la representación de la letra: c','c',5),(1,'Esta
es la representación de la letra: d','d',6),(1,'Esta es la representación
de la letra: e','e',7),(1,'Esta es la representación de la letra:
f','f',8),(1,'Esta es la representación de la letra: g','g',9),(1,'Esta
es la representación de la letra: h','h',10),(1,'Esta es la
representación de la letra: i','i',11),(1,'Esta es la representación de
la letra: j','j',12);";
String Ins_Braille2="insert into Braille values(2,'La 2º serie se
forma con los puntos de la primera serie, añadiéndoles el punto número 3
y, así, obtenemos las siguientes letras, a excepción de la letra ñ
143
(conviene recordar aquí que Luis Braille era francés)','',1),(2,'Esta es
la representación de la letra: k','k',2),(2,'Esta es la representación de
la letra: l','l',3),(2,'Esta es la representación de la letra:
m','m',4),(2,'Esta es la representación de la letra: n','n',5),(2,'Esta
es la representación de la letra: o','o',6),(2,'Esta es la representación
de la letra: p','p',7),(2,'Esta es la representación de la letra:
q','q',8),(2,'Esta es la representación de la letra: r','r',9),(2,'Esta
es la representación de la letra: s','s',10),(2,'Esta es la
representación de la letra: t','t',11);";
String Ins_Braille3="insert into Braille values(3,'la 3ª serie se
forma con los puntos de la 2ª serie, añadiendo el punto número
6','',1),(3,'Esta es la representación de la letra: u','u',2),(3,'Esta es
la representación de la letra: v','v',3),(3,'Esta es la representación de
la letra: x','x',4),(3,'Esta es la representación de la letra:
y','y',5),(3,'Esta es la representación de la letra: z','z',6),(3,'Esta
es la representación de la letra: á','a2',7),(3,'Esta es la
representación de la letra: é','e2',8),(3,'Esta es la representación de
la letra: í','i2',9),(3,'Esta es la representación de la letra:
ó','o2',10),(3,'Esta es la representación de la letra: ú','u2',11);";
String Ins_Braille4="insert into Braille values(4,'En la 4ª serie
están los elementos de la 1ª serie, añadiendo el punto número
6.','',1),(4,'En esta serie se forman signos propios del francés, por lo
que aquí sólo presentamos las letras que nos interesan en
español','',2),(4,'Esta es la representación de la letra:
ñ','n2',3),(4,'Esta es la representación de la letra: ü','u3',4),(4,'Esta
es la representación de la letra: w','w',5);";
String Ins_Braille5="insert into Braille values(5,'En la 5ª serie
tenemos los signos de la primera serie, pero utilizando los puntos de la
mitad inferior de la celdilla o cajetín. Así, conseguimos los signos de
puntuación','',1),(5,'Para representar la coma(,) se usa este
signo','coma',2),(5,'Para representar punto y coma(;) se usa este
signo','puntcom',3),(5,'Para representar los dospuntos(:) se usa este
signo','dospunt',4),(5,'Para representar el signo de la suma(+) se usa
este signo','suma',5),(5,'Los signos de interrogación(¿?) se representan
como se aprecia en la imagen. Se ponen al inicio y al final de la frase,
tal como se hace en tinta','interrogacion',6),(5,'Los signos de
admiración(¡!) se representan como se aprecia en la imagen. Se ponen al
inicio y al final de la frase','admiracion',7),(5,'El signo igual(=) se
representa de la siguiente manera','igual',8),(5,'Las Comillas se
representan como se aprecia en la imagen, van al inicio y al final de la
frase','comillas',9),(5,'Esta imagen representa la escritura en cursiva,
se usa para resaltar alguna palabra o frase de
interés','cursiva',10),(5,'Para representar los grados(°) se usa el
siguiente símbolo','grados',11);";
public DbHelper(cont_ej ejercicios, String s, Context context, int i)
{
super(context, DB_NAME, null, DB_SCHEME_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(Crea_Us);
db.execSQL(Crea_PBraille);
db.execSQL(Crea_Silencio);
db.execSQL(Crea_Num);
db.execSQL(Crea_Signos);
144
db.execSQL(Crea_Notas);
db.execSQL(Crea_Braille);
db.execSQL(Ins_Us);
db.execSQL(Ins_Silencio);
db.execSQL(Ins_Num);
db.execSQL(Ins_Sig);
db.execSQL(Ins_Nota);
db.execSQL(Ins_PBraille1);
db.execSQL(Ins_PBraille2);
db.execSQL(Ins_PBraille3);
db.execSQL(Ins_PBraille4);
db.execSQL(Ins_PBraille5);
db.execSQL(Ins_Braille1);
db.execSQL(Ins_Braille2);
db.execSQL(Ins_Braille3);
db.execSQL(Ins_Braille4);
db.execSQL(Ins_Braille5);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
}
}
Ejercicios package com.example.arnold.appbraille;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.ExpandableListView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Ejercicios extends AppCompatActivity {
HashMap<String, List<String>> lista_asignaturas;
List<String>Lista_temas;
ExpandableListView Exp_list;
Asig_Adapter Adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ejercicios);
Exp_list = (ExpandableListView) findViewById(R.id.expej);
lista_asignaturas = ExpAdapter.getinfo();
Lista_temas = new ArrayList<String>(lista_asignaturas.keySet());
Adapter = new Asig_Adapter(this, lista_asignaturas, Lista_temas);
145
Exp_list.setAdapter(Adapter);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Aqui puedes encontrar ejercicios
para evaluar tu nivel de Braille " +
"y lo aprendido en el glosario",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
Exp_list.setOnChildClickListener(new
ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View
v, int groupPosition, int childPosition, long id) {
if (groupPosition == 2 && childPosition == 0) {
Ejercicios.super.finish();
startActivity(new Intent(Ejercicios.this,
cont_ej.class));
}
if (groupPosition == 0 && childPosition == 0) {
Ejercicios.super.finish();
startActivity(new Intent(Ejercicios.this,
num_ej.class));
}
if (groupPosition == 0 && childPosition == 1) {
Ejercicios.super.finish();
startActivity(new Intent(Ejercicios.this,
signosmate_ej.class));
}
if (groupPosition == 1 && childPosition == 0) {
Ejercicios.super.finish();
startActivity(new Intent(Ejercicios.this,
notas_ej.class));
}
if (groupPosition == 1 && childPosition == 1) {
Ejercicios.super.finish();
startActivity(new Intent(Ejercicios.this,
silencios_ej.class));
}
return false;
}
});
findViewById(R.id.imageButton4).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Ejercicios.this,
146
Principal.class));
Ejercicios.super.finish();
}
});
}
}
ExpAdapter package com.example.arnold.appbraille;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by Arnold on 24/03/2016.
*/
public class ExpAdapter {
public static HashMap<String, List<String>> getinfo() {
HashMap<String, List<String>> Det_asig = new HashMap<>();
List<String> Braille = new ArrayList<String>();
Braille.add("Evaluar Nivel");
List<String> Musica = new ArrayList<String>();
Musica.add("Notas");
Musica.add("Silencios");
List<String> Matematicas = new ArrayList<String>();
Matematicas.add("Números");
Matematicas.add("Signos");
Det_asig.put("Braille", Braille);
Det_asig.put("Música",Musica);
Det_asig.put("Matemáticas",Matematicas);
return Det_asig;
}
}
Glosario package com.example.arnold.appbraille;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
147
public class Glosario extends AppCompatActivity {
private List<item> arrayletra = new ArrayList<item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glosario);
letras();
verletra();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Las letras mayúsculas se escriben
anteponiéndoles un prefijo formado por los puntos 4 y 6",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
findViewById(R.id.imageButton).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Glosario.this, Menuexp.class));
Glosario.super.finish();
}
});
}
private void letras() {
arrayletra.add(new item("a", R.drawable.a));
arrayletra.add(new item("b", R.drawable.b));
arrayletra.add(new item("c", R.drawable.c));
arrayletra.add(new item("d", R.drawable.d));
arrayletra.add(new item("e", R.drawable.e));
arrayletra.add(new item("f", R.drawable.f));
arrayletra.add(new item("g", R.drawable.g));
arrayletra.add(new item("h", R.drawable.h));
arrayletra.add(new item("i", R.drawable.i));
arrayletra.add(new item("j", R.drawable.j));
arrayletra.add(new item("k", R.drawable.k));
arrayletra.add(new item("l", R.drawable.l));
arrayletra.add(new item("m", R.drawable.m));
arrayletra.add(new item("n", R.drawable.n));
arrayletra.add(new item("ñ", R.drawable.n2));
arrayletra.add(new item("o", R.drawable.o));
arrayletra.add(new item("p", R.drawable.p));
arrayletra.add(new item("q", R.drawable.q));
arrayletra.add(new item("r", R.drawable.r));
arrayletra.add(new item("s", R.drawable.s));
148
arrayletra.add(new item("t", R.drawable.t));
arrayletra.add(new item("u", R.drawable.u));
arrayletra.add(new item("v", R.drawable.v));
arrayletra.add(new item("w", R.drawable.w));
arrayletra.add(new item("x", R.drawable.x));
arrayletra.add(new item("y", R.drawable.y));
arrayletra.add(new item("z", R.drawable.z));
}
private void verletra() {
ArrayAdapter<item> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.lista_letras);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(Glosario.this, R.layout.item_view, arrayletra);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.item_view, parent, false);
item letra_act = arrayletra.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.imagen);
ImageView.setImageResource(letra_act.getimg());
TextView letrat
=(TextView)itemView.findViewById(R.id.Text_letra);
letrat.setText(letra_act.getop());
return itemView;
}
}
}
item
package com.example.arnold.appbraille;
/**
* Created by Arnold on 3/02/2016.
149
*/
public class item {
private String op;
private int img;
public item(String op,int img){
setop(op);
setsimb(img);
}
public void setop(String let) {
this.op=let;
}
public void setsimb(int simb) {
this.img=simb;
}
public int getimg(){
return img;
}
public String getop(){
return op;
}
}
Menuexp package com.example.arnold.appbraille;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Menuexp extends AppCompatActivity {
HashMap<String, List<String>> lista_asignaturas;
List<String>Lista_temas;
ExpandableListView Exp_list;
Asig_Adapter Adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menuexp);
Exp_list = (ExpandableListView) findViewById(R.id.exp_List);
lista_asignaturas = DataProvider.getinfo();
Lista_temas = new ArrayList<String>(lista_asignaturas.keySet());
Adapter = new Asig_Adapter(this, lista_asignaturas, Lista_temas);
Exp_list.setAdapter(Adapter);
Exp_list.setOnChildClickListener(new
150
ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View
v, int groupPosition, int childPosition, long id) {
if (groupPosition == 2 && childPosition == 0) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
Glosario.class));}
if (groupPosition == 2 && childPosition == 1) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
acentos.class));}
if (groupPosition == 0 && childPosition == 0) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
numeros.class));}
if (groupPosition == 0 && childPosition == 1) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
signos_mate.class));}
if (groupPosition == 1 && childPosition == 0) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
musica.class));}
if (groupPosition == 1 && childPosition == 1) {
Menuexp.super.finish();
startActivity(new Intent(Menuexp.this,
silencios.class));}
return false;
}
});
findViewById(R.id.imageButton6).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Menuexp.this, Principal.class));
}
});
}
}
Música package com.example.arnold.appbraille;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
151
import java.util.ArrayList;
import java.util.List;
public class musica extends AppCompatActivity {
private List<notas> arraynotas = new ArrayList<notas>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notas);
nota();
vernota();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Las notas se representan por
caracteres que corresponden a las letras d,e,f,g,h,i,j",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
findViewById(R.id.imageButton5).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(musica.this, Menuexp.class));
musica.super.finish();
}
});
}
private void nota() {
arraynotas.add(new notas(R.drawable.crsc, R.drawable.cr));
arraynotas.add(new notas(R.drawable.cbf, R.drawable.cb));
arraynotas.add(new notas(R.drawable.cnsf, R.drawable.cn));
arraynotas.add(new notas(R.drawable.ccg, R.drawable.cc));
arraynotas.add(new notas(R.drawable.drsc, R.drawable.dr));
arraynotas.add(new notas(R.drawable.dbf, R.drawable.db));
arraynotas.add(new notas(R.drawable.dnsf, R.drawable.dn));
arraynotas.add(new notas(R.drawable.dcg, R.drawable.dc));
arraynotas.add(new notas(R.drawable.ersc, R.drawable.er));
arraynotas.add(new notas(R.drawable.ebf, R.drawable.eb));
arraynotas.add(new notas(R.drawable.ensf, R.drawable.en));
arraynotas.add(new notas(R.drawable.ecg, R.drawable.ec));
152
arraynotas.add(new notas(R.drawable.frsc, R.drawable.fr));
arraynotas.add(new notas(R.drawable.fbf, R.drawable.fb));
arraynotas.add(new notas(R.drawable.fnsf, R.drawable.fn));
arraynotas.add(new notas(R.drawable.fcg, R.drawable.fc));
arraynotas.add(new notas(R.drawable.grsc, R.drawable.gr));
arraynotas.add(new notas(R.drawable.gbf, R.drawable.gb));
arraynotas.add(new notas(R.drawable.gnsf, R.drawable.gn));
arraynotas.add(new notas(R.drawable.gcg, R.drawable.gc));
arraynotas.add(new notas(R.drawable.arsc, R.drawable.ar));
arraynotas.add(new notas(R.drawable.abf, R.drawable.ab));
arraynotas.add(new notas(R.drawable.ansf, R.drawable.an));
arraynotas.add(new notas(R.drawable.acg, R.drawable.ac));
arraynotas.add(new notas(R.drawable.brsc, R.drawable.br));
arraynotas.add(new notas(R.drawable.bbf, R.drawable.bb));
arraynotas.add(new notas(R.drawable.bnsf, R.drawable.bn));
arraynotas.add(new notas(R.drawable.bcg, R.drawable.bc));
}
private void vernota() {
ListView list = (ListView) findViewById(R.id.lista_notas);
ArrayAdapter<notas> adapter = new MyListAdapter();
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<notas> {
public MyListAdapter() {
super(musica.this, R.layout.music_menu, arraynotas);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.music_menu, parent, false);
notas nota_act = arraynotas.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.img_nota);
ImageView.setImageResource(nota_act.getnota());
ImageView ImageView2= (ImageView)
itemView.findViewById(R.id.Img_notab);
ImageView2.setImageResource(nota_act.getnotab());
return itemView;
}
153
}
}
Notas package com.example.arnold.appbraille;
/**
* Created by Arnold on 19/02/2016.
*/
public class notas {
private int nota;
private int notab;
public notas(int nota,int notab){
setnot(nota);
setnotb(notab);
}
public void setnot(int nota) {
this.nota=nota;
}
public void setnotb(int notab) {
this.notab=notab;
}
public int getnota(){
return nota;
}
public int getnotab(){
return notab;
}
}
notas_ej package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
154
import android.widget.Toast;
public class notas_ej extends AppCompatActivity {
int p=1,niv=0,aciertos=0;
String Resp;
Button Cancelar;
Button Siguiente;
TextView Preg;
ImageView imgp;
RadioButton r1,r2,r3,r4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eje_lay);
imgp= (ImageView)findViewById(R.id.Imagen_p);
Cancelar = (Button)findViewById(R.id.btn_canc);
Siguiente = (Button)findViewById(R.id.btn_env);
Preg= (TextView)findViewById(R.id.Txt_preg);
r1= (RadioButton)findViewById(R.id.R1);
r2= (RadioButton)findViewById(R.id.R2);
r3= (RadioButton)findViewById(R.id.R3);
r4= (RadioButton)findViewById(R.id.R4);
poner_letras(niv);
Cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new
Intent(notas_ej.this,Ejercicios.class));
notas_ej.super.finish();
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if((r1.isChecked()==false)&&(r2.isChecked()==false)&&(r3.isChecked()==fal
se)&&(r4.isChecked()==false))
Toast.makeText(getApplicationContext(), "Selecciona
una Respuesta", Toast.LENGTH_LONG).show();
else{
if(p<11)
analizarrespuestas(Resp);
p=p+1;
if(p<11)
poner_letras(niv);
if(p==11){
if(aciertos>=4)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos buen trabajo :D",
Toast.LENGTH_LONG).show();
if(aciertos<=3)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos, estudia un poco más :C",
Toast.LENGTH_LONG).show();
startActivity(new
155
Intent(notas_ej.this,Ejercicios.class));
notas_ej.super.finish();}
if(p==10) {
Siguiente.setText("Terminar");}}
}
});
}
private void analizarrespuestas(String Resp) {
if(r1.isChecked())
if(Resp.equalsIgnoreCase((String) r1.getText()))
aciertos=aciertos+1;
if(r2.isChecked())
if(Resp.equalsIgnoreCase((String) r2.getText()))
aciertos=aciertos+1;
if(r3.isChecked())
if(Resp.equalsIgnoreCase((String) r3.getText()))
aciertos=aciertos+1;
if(r4.isChecked())
if(Resp.equalsIgnoreCase((String) r4.getText()))
aciertos=aciertos+1;
}
public void poner_letras(int niv){
String BPreg = null,Ruta = null,Op = null;
String[] Array;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Notas where NPreg="+p;
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
BPreg=c.getString(1);
Ruta=c.getString(2);
Op=c.getString(3);
Resp=c.getString(4);
Preg.setText(BPreg);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName ,
"drawable", getPackageName());
imgp.setImageResource(resID);
Array=Op.split(" ");
r1.setText(Array[0]);
r2.setText(Array[1]);
r3.setText(Array[2]);
r4.setText(Array[3]);
c.close();
db.close();
Siguiente.setText("Siguiente");}
}
num_ej package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
156
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class num_ej extends AppCompatActivity {
int p=1,niv=0,aciertos=0;
String Resp;
Button Cancelar;
Button Siguiente;
TextView Preg;
ImageView imgp;
RadioButton r1,r2,r3,r4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eje_lay);
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
imgp= (ImageView)findViewById(R.id.Imagen_p);
Cancelar = (Button)findViewById(R.id.btn_canc);
Siguiente = (Button)findViewById(R.id.btn_env);
Preg= (TextView)findViewById(R.id.Txt_preg);
r1= (RadioButton)findViewById(R.id.R1);
r2= (RadioButton)findViewById(R.id.R2);
r3= (RadioButton)findViewById(R.id.R3);
r4= (RadioButton)findViewById(R.id.R4);
poner_letras(niv);
Cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(num_ej.this,Ejercicios.class));
num_ej.super.finish();
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if((r1.isChecked()==false)&&(r2.isChecked()==false)&&(r3.isChecked()==fal
se)&&(r4.isChecked()==false))
Toast.makeText(getApplicationContext(), "Selecciona
una Respuesta", Toast.LENGTH_LONG).show();
else{
if(p<11)
analizarrespuestas(Resp);
p=p+1;
if(p<11)
poner_letras(niv);
if(p==11){
if(aciertos>=4)
Toast.makeText(getApplicationContext(),
157
"Tuviste "+aciertos+" aciertos buen trabajo :D",
Toast.LENGTH_LONG).show();
if(aciertos<=3)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos, estudia un poco más :C",
Toast.LENGTH_LONG).show();
startActivity(new
Intent(num_ej.this,Ejercicios.class));
num_ej.super.finish();}
if(p==10) {
Siguiente.setText("Terminar");}}
}
});
}
private void analizarrespuestas(String Resp) {
if(r1.isChecked())
if(Resp.equalsIgnoreCase((String) r1.getText()))
aciertos=aciertos+1;
if(r2.isChecked())
if(Resp.equalsIgnoreCase((String) r2.getText()))
aciertos=aciertos+1;
if(r3.isChecked())
if(Resp.equalsIgnoreCase((String) r3.getText()))
aciertos=aciertos+1;
if(r4.isChecked())
if(Resp.equalsIgnoreCase((String) r4.getText()))
aciertos=aciertos+1;
}
public void poner_letras(int niv){
String BPreg = null,Ruta = null,Op = null;
String[] Array;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Numero where NPreg="+p;
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
BPreg=c.getString(1);
Ruta=c.getString(2);
Op=c.getString(3);
Resp=c.getString(4);
Preg.setText(BPreg);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName ,
"drawable", getPackageName());
imgp.setImageResource(resID);
Array=Op.split(" ");
r1.setText(Array[0]);
r2.setText(Array[1]);
r3.setText(Array[2]);
r4.setText(Array[3]);
c.close();
db.close();
Siguiente.setText("Siguiente");}
}
158
números package com.example.arnold.appbraille;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class numeros extends AppCompatActivity {
private List<item> arraynum = new ArrayList<item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_numeros);
num();
vernum();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Para escribir los números se utiliza
el prefijo formado por los puntos 3456", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
findViewById(R.id.imageButton7).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(numeros.this, Menuexp.class));
numeros.super.finish();
}
});
}
private void num() {
arraynum.add(new item("1", R.drawable.num1));
arraynum.add(new item("2", R.drawable.num2));
arraynum.add(new item("3", R.drawable.num3));
159
arraynum.add(new item("4", R.drawable.num4));
arraynum.add(new item("5", R.drawable.num5));
arraynum.add(new item("6", R.drawable.num6));
arraynum.add(new item("7", R.drawable.num7));
arraynum.add(new item("8", R.drawable.num8));
arraynum.add(new item("9", R.drawable.num9));
arraynum.add(new item("0", R.drawable.num0));
}
private void vernum() {
ArrayAdapter<item> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.lista_num);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(numeros.this, R.layout.item_view, arraynum);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.item_view, parent, false);
item letra_act = arraynum.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.imagen);
ImageView.setImageResource(letra_act.getimg());
TextView letrat
=(TextView)itemView.findViewById(R.id.Text_letra);
letrat.setText(letra_act.getop());
return itemView;
}
}
}
Principal package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
160
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class Principal extends AppCompatActivity {
private List<item> arrayop = new ArrayList<item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
opciones();
veropciones();
click();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Elige la opción que desees",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
private void opciones() {
arrayop.add(new item("Aprendizaje", R.drawable.aprendizaje));
arrayop.add(new item("Glosario", R.drawable.glosario));
arrayop.add(new item("Evaluación", R.drawable.evaluar));
arrayop.add(new item("Transcripción", R.drawable.transcribir));
arrayop.add(new item("Acerca De", R.drawable.about));
}
private void veropciones() {
ArrayAdapter<item> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.list_p);
list.setAdapter(adapter);
}
private void click(){
ListView list= (ListView)findViewById(R.id.list_p);
161
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
switch (position) {
case 0:startActivity(new
Intent(Principal.this,Aprendizaje.class));
finish();
break;
case 1:startActivity(new
Intent(Principal.this,Menuexp.class));
finish();
break;
case 2: startActivity(new Intent(Principal.this,
Ejercicios.class));
finish();
break;
case 3: startActivity(new Intent(Principal.this,
Transcriptor.class));
finish();
break;
case 4: startActivity(new Intent(Principal.this,
about.class));
finish();
break;
}
}
});
}
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(Principal.this, R.layout.item_menu, arrayop);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.item_menu, parent, false);
item itm_act = arrayop.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.img_men);
ImageView.setImageResource(itm_act.getimg());
TextView letrat
=(TextView)itemView.findViewById(R.id.text_menu);
letrat.setText(itm_act.getop());
162
return itemView;
}
}
}
signos_mate package com.example.arnold.appbraille;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class signos_mate extends AppCompatActivity {
private List<item> arraynum = new ArrayList<item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signos_mate);
num();
vernum();
findViewById(R.id.imageButton9).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(signos_mate.this,
Menuexp.class));
signos_mate.super.finish();
}
});
}
private void num() {
arraynum.add(new item("÷", R.drawable.divicion));
arraynum.add(new item("=", R.drawable.igual));
arraynum.add(new item("+/-", R.drawable.masmenos));
arraynum.add(new item(">", R.drawable.mayorque));
arraynum.add(new item("<", R.drawable.menorque));
arraynum.add(new item("X", R.drawable.multiplicacion));
arraynum.add(new item("><", R.drawable.noigual));
arraynum.add(new item("-", R.drawable.resta));
arraynum.add(new item("+", R.drawable.suma));
}
private void vernum() {
ArrayAdapter<item> adapter = new MyListAdapter();
163
ListView list = (ListView) findViewById(R.id.lista_sigm);
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<item> {
public MyListAdapter() {
super(signos_mate.this, R.layout.item_view, arraynum);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.item_view, parent, false);
item letra_act = arraynum.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.imagen);
ImageView.setImageResource(letra_act.getimg());
TextView letrat
=(TextView)itemView.findViewById(R.id.Text_letra);
letrat.setText(letra_act.getop());
return itemView;
}
}
}
signosmate_ej package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class signosmate_ej extends AppCompatActivity {
int p=1,niv=0,aciertos=0;
String Resp;
Button Cancelar;
Button Siguiente;
TextView Preg;
ImageView imgp;
RadioButton r1,r2,r3,r4;
164
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eje_lay);
imgp= (ImageView)findViewById(R.id.Imagen_p);
Cancelar = (Button)findViewById(R.id.btn_canc);
Siguiente = (Button)findViewById(R.id.btn_env);
Preg= (TextView)findViewById(R.id.Txt_preg);
r1= (RadioButton)findViewById(R.id.R1);
r2= (RadioButton)findViewById(R.id.R2);
r3= (RadioButton)findViewById(R.id.R3);
r4= (RadioButton)findViewById(R.id.R4);
poner_letras(niv);
Cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new
Intent(signosmate_ej.this,Ejercicios.class));
signosmate_ej.super.finish();
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if((r1.isChecked()==false)&&(r2.isChecked()==false)&&(r3.isChecked()==fal
se)&&(r4.isChecked()==false))
Toast.makeText(getApplicationContext(), "Selecciona
una Respuesta", Toast.LENGTH_LONG).show();
else{
if(p<10)
analizarrespuestas(Resp);
p=p+1;
if(p<10)
poner_letras(niv);
if(p==10){
if(aciertos>=4)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos buen trabajo :D",
Toast.LENGTH_LONG).show();
if(aciertos<=3)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos, estudia un poco más :C",
Toast.LENGTH_LONG).show();
startActivity(new
Intent(signosmate_ej.this,Ejercicios.class));
signosmate_ej.super.finish();}
if(p==9) {
Siguiente.setText("Terminar");}}
}
});
}
private void analizarrespuestas(String Resp) {
if(r1.isChecked())
if(Resp.equalsIgnoreCase((String) r1.getText()))
165
aciertos=aciertos+1;
if(r2.isChecked())
if(Resp.equalsIgnoreCase((String) r2.getText()))
aciertos=aciertos+1;
if(r3.isChecked())
if(Resp.equalsIgnoreCase((String) r3.getText()))
aciertos=aciertos+1;
if(r4.isChecked())
if(Resp.equalsIgnoreCase((String) r4.getText()))
aciertos=aciertos+1;
}
public void poner_letras(int niv){
String BPreg = null,Ruta = null,Op = null;
String[] Array;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Signos where NPreg="+p;
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
BPreg=c.getString(1);
Ruta=c.getString(2);
Op=c.getString(3);
Resp=c.getString(4);
Preg.setText(BPreg);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName ,
"drawable", getPackageName());
imgp.setImageResource(resID);
Array=Op.split(" ");
r1.setText(Array[0]);
r2.setText(Array[1]);
r3.setText(Array[2]);
r4.setText(Array[3]);
c.close();
db.close();
Siguiente.setText("Siguiente");}
}
silencios package com.example.arnold.appbraille;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class silencios extends AppCompatActivity {
private List<notas> arraynotas = new ArrayList<notas>();
166
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_silencios);
nota();
vernota();
findViewById(R.id.imageButton8).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(silencios.this, Menuexp.class));
silencios.super.finish();
}
});
}
private void nota() {
arraynotas.add(new notas(R.drawable.srsc, R.drawable.sir));
arraynotas.add(new notas(R.drawable.sbf, R.drawable.sib));
arraynotas.add(new notas(R.drawable.snsf, R.drawable.sin));
arraynotas.add(new notas(R.drawable.scg, R.drawable.sic));
}
private void vernota() {
ListView list = (ListView) findViewById(R.id.lista_sil);
ArrayAdapter<notas> adapter = new MyListAdapter();
list.setAdapter(adapter);
}
private class MyListAdapter extends ArrayAdapter<notas> {
public MyListAdapter() {
super(silencios.this, R.layout.music_menu, arraynotas);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.music_menu, parent, false);
notas nota_act = arraynotas.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.img_nota);
ImageView.setImageResource(nota_act.getnota());
ImageView ImageView2= (ImageView)
itemView.findViewById(R.id.Img_notab);
ImageView2.setImageResource(nota_act.getnotab());
167
return itemView;
}
}
}
silencios_ej package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class silencios_ej extends AppCompatActivity {
int p=1,niv=0,aciertos=0;
String Resp;
Button Cancelar;
Button Siguiente;
TextView Preg;
ImageView imgp;
RadioButton r1,r2,r3,r4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.eje_lay);
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
imgp= (ImageView)findViewById(R.id.Imagen_p);
Cancelar = (Button)findViewById(R.id.btn_canc);
Siguiente = (Button)findViewById(R.id.btn_env);
Preg= (TextView)findViewById(R.id.Txt_preg);
r1= (RadioButton)findViewById(R.id.R1);
r2= (RadioButton)findViewById(R.id.R2);
r3= (RadioButton)findViewById(R.id.R3);
r4= (RadioButton)findViewById(R.id.R4);
poner_letras(niv);
Cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new
Intent(silencios_ej.this,Ejercicios.class));
silencios_ej.super.finish();
}
});
Siguiente.setOnClickListener(new View.OnClickListener() {
168
@Override
public void onClick(View view) {
if((r1.isChecked()==false)&&(r2.isChecked()==false)&&(r3.isChecked()==fal
se)&&(r4.isChecked()==false))
Toast.makeText(getApplicationContext(), "Selecciona
una Respuesta", Toast.LENGTH_LONG).show();
else{
if(p<7)
analizarrespuestas(Resp);
p=p+1;
if(p<7)
poner_letras(niv);
if(p==7){
if(aciertos>=4)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos buen trabajo :D",
Toast.LENGTH_LONG).show();
if(aciertos<=3)
Toast.makeText(getApplicationContext(),
"Tuviste "+aciertos+" aciertos, estudia un poco más :C",
Toast.LENGTH_LONG).show();
startActivity(new
Intent(silencios_ej.this,Ejercicios.class));
silencios_ej.super.finish();}
if(p==6) {
Siguiente.setText("Terminar");}}
}
});
}
private void analizarrespuestas(String Resp) {
if(r1.isChecked())
if(Resp.equalsIgnoreCase((String) r1.getText()))
aciertos=aciertos+1;
if(r2.isChecked())
if(Resp.equalsIgnoreCase((String) r2.getText()))
aciertos=aciertos+1;
if(r3.isChecked())
if(Resp.equalsIgnoreCase((String) r3.getText()))
aciertos=aciertos+1;
if(r4.isChecked())
if(Resp.equalsIgnoreCase((String) r4.getText()))
aciertos=aciertos+1;
}
public void poner_letras(int niv){
String BPreg = null,Ruta = null,Op = null;
String[] Array;
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Silencio where NPreg="+p;
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
BPreg=c.getString(1);
Ruta=c.getString(2);
Op=c.getString(3);
169
//NPreg integer , Pregunta text , Ruta text ,Op text , Respuesta
text
Resp=c.getString(4);
Preg.setText(BPreg);
String mDrawableName = Ruta;
int resID = getResources().getIdentifier(mDrawableName ,
"drawable", getPackageName());
imgp.setImageResource(resID);
Array=Op.split(" ");
r1.setText(Array[0]);
r2.setText(Array[1]);
r3.setText(Array[2]);
r4.setText(Array[3]);
c.close();
db.close();
Siguiente.setText("Siguiente");}
}
Splash package com.example.arnold.appbraille;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
/**
* Created by Arnold on 27/02/2016.
*/
public class Splash extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
final ImageView ImageView= (ImageView)
findViewById(R.id.img_anim);
final Animation animation =
AnimationUtils.loadAnimation(getBaseContext(),R.anim.animacion);
final Animation animation2 =
AnimationUtils.loadAnimation(getBaseContext(),R.anim.abc_fade_out);
ImageView.startAnimation(animation);
animation.setAnimationListener(new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
ImageView.startAnimation(animation2);
finish();
startActivity(new Intent(Splash.this, Principal.class));
}
170
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
}
trans_l package com.example.arnold.appbraille;
/**
* Created by Arnold on 25/02/2016.
*/
public class trans_l {
private int letra;
public trans_l(int letra){
setnot(letra);
}
public void setnot(int letra) {
this.letra=letra;
}
public int getnota(){
return letra;
}
}
Transcriptor package com.example.arnold.appbraille;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
171
import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
public class Transcriptor extends AppCompatActivity {
Button button;
EditText editText;
private List<trans_l> arraynotas = new ArrayList<trans_l>();
private static int num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transcriptor);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
editText = (EditText)findViewById(R.id.editText);
button = (Button)findViewById(R.id.button);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Escribe el texto que deseas
transcribir en el campo", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String dato = editText.getText().toString();
img(dato);
verimg();
}
});
findViewById(R.id.imageButton2).setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Transcriptor.this,
Principal.class));
Transcriptor.super.finish();
}
});
}
public static File crearFichero(String nombreFichero) throws
172
IOException {
File ruta = getRuta();
File fichero = null;
if (ruta != null)
fichero = new File(ruta, nombreFichero);
return fichero;
}
public static File getRuta() {
File ruta = null;
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
ruta = new
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_
DOWNLOADS), "Transcripción");
if (ruta != null) {
if (!ruta.mkdirs()) {
if (!ruta.exists()) {
return null;
}
}
}
} else {
}
return ruta;
}
private void verimg(){
ArrayAdapter<trans_l> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.lista_transc);
list.setAdapter(adapter);
}
private void img(String dato) {
int let=dato.length();
String car="";
arraynotas.clear();
Document documento = new Document();
File f = null;
try {
DbHelper dbHp= new DbHelper(null, "Braille.sqlite", this, 1);
SQLiteDatabase db=dbHp.getReadableDatabase();
String Query="Select * from Usuario where Nivel=1";
Cursor c = db.rawQuery(Query, null);
c.moveToFirst();
num=c.getInt(1);
String NOMBRE_DOCUMENTO = "Transcripción"+num+".pdf";
Bitmap bitmap;
Image imagen;
f = crearFichero(NOMBRE_DOCUMENTO);
FileOutputStream ficheroPdf = new
FileOutputStream(f.getAbsolutePath());
PdfWriter.getInstance(documento, ficheroPdf);
documento.open();
PdfPTable tabla = new PdfPTable(35);
173
documento.addTitle("Documento generado por AppBraille");
documento.add(new Paragraph("Perfore la hoja en la parte de
atras para que sea leída correctamente\n"));
for (int i=0;i<let;i++){
if(i!=let-1)
car=dato.substring(i,i+1);
if(i==let-1)
car=dato.substring(let-1);
if(car.equalsIgnoreCase(" ")||car.equalsIgnoreCase("")){
arraynotas.add(new trans_l(R.drawable.esp));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.esp);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);}
if(car.equalsIgnoreCase("a")){
arraynotas.add(new trans_l(R.drawable.a));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.a);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("b")){
arraynotas.add(new trans_l(R.drawable.b));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.b);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("c")){
arraynotas.add(new trans_l(R.drawable.c));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.c);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("d")){
arraynotas.add(new trans_l(R.drawable.d));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.d);
ByteArrayOutputStream stream = new
174
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("e")){
arraynotas.add(new trans_l(R.drawable.e));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.e);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("é")){
arraynotas.add(new trans_l(R.drawable.e2));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.e2);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("f")){
arraynotas.add(new trans_l(R.drawable.f));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.f);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("g")){
arraynotas.add(new trans_l(R.drawable.g));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.g);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("h")){
arraynotas.add(new trans_l(R.drawable.h));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.h);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
175
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("i")){
arraynotas.add(new trans_l(R.drawable.i));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.i);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("í")){
arraynotas.add(new trans_l(R.drawable.i2));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.i2);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("j")){
arraynotas.add(new trans_l(R.drawable.j));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.j);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("k")){
arraynotas.add(new trans_l(R.drawable.k));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.k);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("l")){
arraynotas.add(new trans_l(R.drawable.l));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.l);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
176
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("m")){
arraynotas.add(new trans_l(R.drawable.m));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.m);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("n")){
arraynotas.add(new trans_l(R.drawable.n));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.n);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("ñ")){
arraynotas.add(new trans_l(R.drawable.n2));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.n2);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("o")){
arraynotas.add(new trans_l(R.drawable.o));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.o);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("ó")){
arraynotas.add(new trans_l(R.drawable.o2));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.o2);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
177
if(car.equalsIgnoreCase("p")){
arraynotas.add(new trans_l(R.drawable.p));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.p);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("q")){
arraynotas.add(new trans_l(R.drawable.q));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.q);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("r")){
arraynotas.add(new trans_l(R.drawable.r));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.r);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("s")){
arraynotas.add(new trans_l(R.drawable.s));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.s);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("t")){
arraynotas.add(new trans_l(R.drawable.t));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.t);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("u")){
arraynotas.add(new trans_l(R.drawable.u));
178
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.u);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("ú")){
arraynotas.add(new trans_l(R.drawable.u2));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.u2);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("ü")){
arraynotas.add(new trans_l(R.drawable.u3));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.u3);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("v")){
arraynotas.add(new trans_l(R.drawable.v));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.v);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("w")){
arraynotas.add(new trans_l(R.drawable.w));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.w);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("x")){
arraynotas.add(new trans_l(R.drawable.x));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.x);
179
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("y")){
arraynotas.add(new trans_l(R.drawable.y));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.y);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("z")){
arraynotas.add(new trans_l(R.drawable.z));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.z);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase(";")){
arraynotas.add(new trans_l(R.drawable.puntcom));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.puntcom);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase(":")){
arraynotas.add(new trans_l(R.drawable.dospunt));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.dospunt);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase(",")){
arraynotas.add(new trans_l(R.drawable.coma));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.coma);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
180
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("¿")){
arraynotas.add(new
trans_l(R.drawable.interrogacion));
bitmap =
BitmapFactory.decodeResource(this.getResources(),
R.drawable.interrogacion);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("?")){
arraynotas.add(new
trans_l(R.drawable.interrogacion));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.admiracion);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("!")){
arraynotas.add(new trans_l(R.drawable.admiracion));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.admiracion);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("¡")){
arraynotas.add(new trans_l(R.drawable.admiracion));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.admiracion);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase(".")){
arraynotas.add(new trans_l(R.drawable.punto));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.punto);
ByteArrayOutputStream stream = new
181
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("-")){
arraynotas.add(new trans_l(R.drawable.resta));
bitmap =
BitmapFactory.decodeResource(this.getResources(), R.drawable.resta);
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
stream);
imagen = Image.getInstance(stream.toByteArray());
tabla.addCell(imagen);
}
if(car.equalsIgnoreCase("\n")){
arraynotas.add(new trans_l(R.drawable.esp));
tabla.completeRow();
}
}
num=num+1;
db.execSQL("UPDATE Usuario SET Niv=" + num + " WHERE Nivel=1
");
documento.add(tabla);
documento.add(new Paragraph("\nDocumento generado por
AppBraille\n"));
documento.addCreationDate();
c.close();
db.close();
documento.close();
Toast.makeText(getApplicationContext(),"Se ha generado el
documento en SD/Download/Transcripción", Toast.LENGTH_LONG).show();
} catch (IOException |DocumentException e) {
e.printStackTrace();
}
}
private class MyListAdapter extends ArrayAdapter<trans_l> {
public MyListAdapter() {
super(Transcriptor.this, R.layout.transc_layout, arraynotas);
}
public View getView(int position, View ConvertView, ViewGroup
parent) {
View itemView = ConvertView;
if (itemView == null)
itemView =
getLayoutInflater().inflate(R.layout.transc_layout, parent, false);
trans_l letra_act = arraynotas.get(position);
ImageView ImageView= (ImageView)
itemView.findViewById(R.id.imageView);
ImageView.setImageResource(letra_act.getnota());
return itemView;
}
182
}
}
2. Animación (XML)
animacion <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="3000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
<scale
android:duration="3000"
android:pivotY="50%"
android:pivotX="50%"
android:toXScale="100%"
android:toYScale="100%"/>
</set>
3. Actividades (XML)
Activity_about <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.about"
android:background="#060000">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:weightSum="1">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:layout_gravity="center_horizontal"
android:background="@drawable/info" />
<TextView
android:layout_width="299dp"
android:layout_height="wrap_content"
183
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textView4"
android:layout_gravity="center_horizontal"
android:layout_weight="10"
android:textColor="#ffffff"
android:textAlignment="center"
android:textSize="20dp"
android:text="AppBraille Versión 1.0 fue desarrollada por
Arnold Stiven Alfonso Contreras.
AppBraille es una herramienta que permite aprender Braille, transcribir
texto, consultar signografía musical y matemática." />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton3"
android:src="@android:drawable/ic_menu_revert"
android:layout_marginBottom="44dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</LinearLayout>
</RelativeLayout>
Activity_acentos <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.acentos">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista_acentos"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/glosario"
android:divider="@android:drawable/divider_horizontal_dark"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton10"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@android:drawable/ic_menu_revert" />
</RelativeLayout>
184
Activity_aprendizaje <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.Aprendizaje"
android:background="#010000">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Texto De Ejemplo"
android:id="@+id/text_ap"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="35dp"
android:layout_alignParentEnd="false"
android:layout_alignParentStart="false"
android:textColor="#ffffff" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image_ap"
android:layout_below="@+id/text_ap"
android:layout_centerHorizontal="true"
android:src="@drawable/gen" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Anterior"
android:src="@drawable/abc_ic_ab_back_mtrl_am_alpha"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/siguiente"
android:layout_toStartOf="@+id/siguiente" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/siguiente"
android:src="@android:drawable/ic_menu_send"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Regresar"
android:layout_alignTop="@+id/siguiente"
185
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@android:drawable/ic_menu_revert" />
</RelativeLayout>
Activity_ejercicios <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.arnold.appbraille.Ejercicios">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_ejercicios" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Activity_Glosario <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.arnold.appbraille.Glosario"
tools:showIn="@layout/content_glosario">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
186
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_glosario" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Activity_menuexp <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.Menuexp"
android:background="#040000">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton6"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@android:drawable/ic_menu_revert" />
<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/exp_List"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:indicatorLeft="?android:attr/expandableListPreferredItemIndicator
Left"
android:divider="#040600"
android:layout_above="@+id/imageButton6"
187
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@android:drawable/bottom_bar"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material" />
</RelativeLayout>
Activity_notas
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context=".musica">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_notas" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Activity_numeros <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.arnold.appbraille.numeros">
188
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_numeros" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Activity_principal <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.arnold.appbraille.Principal"
tools:showIn="@layout/content_principal">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_principal" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
189
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Activity_signos_mate <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.signos_mate"
android:background="@drawable/signos">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista_sigm"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material"
android:divider="@android:color/background_dark" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton9"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@android:drawable/ic_menu_revert" />
</RelativeLayout>
Activity_silencios <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.arnold.appbraille.silencios">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
190
android:id="@+id/lista_sil"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:background="@drawable/musica"
android:divider="@android:color/background_dark"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton8"
android:layout_alignBottom="@+id/lista_sil"
android:src="@android:drawable/ic_menu_revert" />
</RelativeLayout>
Activity_transcriptor <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.arnold.appbraille.Transcriptor">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_transc" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Child_layout <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
191
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/Child_Text"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@android:drawable/alert_dark_frame"
android:textColor="#ffffff"
android:textStyle="bold" />
</RelativeLayout>
Content_ejercicios <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.arnold.appbraille.Ejercicios"
tools:showIn="@layout/activity_ejercicios"
android:background="#000000">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton4"
android:layout_marginBottom="48dp"
android:src="@android:drawable/ic_menu_revert"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ExpandableListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/expej"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/imageButton4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_above="@+id/imageButton4"
android:background="@drawable/evaluar"
192
android:divider="@android:drawable/divider_horizontal_dim_dark"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material" />
</RelativeLayout>
Content_glosario <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.arnold.appbraille.Glosario"
tools:showIn="@layout/activity_glosario">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Glosario"
android:id="@+id/textView2"
android:textColor="#fdfbfb"
android:textAlignment="center"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista_letras"
style="@style/AppTheme"
android:layout_alignLeft="@+id/imageButton"
android:layout_alignStart="@+id/imageButton"
android:divider="@android:drawable/divider_horizontal_dim_dark"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material"
android:drawSelectorOnTop="false"
android:background="@drawable/glosario" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@android:drawable/ic_menu_revert"
android:layout_marginBottom="45dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
193
Content_notas <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".musica"
tools:showIn="@layout/activity_notas">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton5"
android:src="@android:drawable/ic_menu_revert"
android:layout_marginBottom="44dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista_notas"
android:layout_above="@+id/imageButton5"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@drawable/musica"
android:divider="@android:drawable/divider_horizontal_dark"
android:dividerHeight="@dimen/abc_action_bar_content_inset_material" />
</RelativeLayout>
Content_numeros <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.arnold.appbraille.numeros"
tools:showIn="@layout/activity_numeros">
<ImageButton
android:layout_width="wrap_content"
194
android:layout_height="wrap_content"
android:id="@+id/imageButton7"
android:src="@android:drawable/ic_menu_revert"
android:layout_marginBottom="41dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista_num"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_above="@+id/imageButton7"
android:background="@drawable/numeros"
android:divider="#fefcfc"
android:drawSelectorOnTop="true"
android:dividerHeight="@dimen/abc_button_inset_horizontal_material" />
</RelativeLayout>
Content_principal <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.arnold.appbraille.Principal"
tools:showIn="@layout/activity_principal"
android:background="#201d1d"
android:touchscreenBlocksFocus="false">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/list_p"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="false"
android:choiceMode="singleChoice"
android:clickable="true" />
</RelativeLayout>
Content_transc <?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="4"
195
android:columnCount="1"
android:background="@drawable/transcribir">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Escriba el Texto que desea Transcribir"
android:id="@+id/textView3"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textAlignment="center"
android:textIsSelectable="false"
android:textStyle="bold"
android:textSize="25dp"
android:textColor="#fcf5f5"
android:layout_row="0"
android:layout_column="0" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_row="1"
android:layout_column="0">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText"
android:inputType="textMultiLine"
android:layout_below="@+id/t_trans"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/t_trans"
android:layout_alignEnd="@+id/t_trans"
android:textColor="#ffffff"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_row="2"
android:layout_column="0">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lista_transc"
android:choiceMode="none"
android:scrollingCache="false"
android:layout_above="@+id/button"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button"
196
android:layout_below="@+id/editText"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_row="3"
android:layout_column="0">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton2"
android:src="@android:drawable/ic_menu_revert"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Transcribir"
android:id="@+id/button"
android:clickable="true"
android:contextClickable="false"
android:elegantTextHeight="true"
android:enabled="true"
android:onClick="setContentView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</GridLayout>
Eje_lay <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#090000">
<RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="354dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:orientation="vertical"
android:layout_toLeftOf="@+id/btn_env"
android:layout_toStartOf="@+id/btn_env"
android:id="@+id/radioGroup">
<RadioButton
android:layout_width="wrap_content"
197
android:layout_height="wrap_content"
android:id="@+id/R1"
android:checked="false"
android:textColor="#FFFFFFFF"
android:textSize="25dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/R2"
android:checked="false"
android:textColor="#FFFFFFFF"
android:textSize="25dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/R3"
android:checked="false"
android:textColor="#FFFFFFFF"
android:textSize="25dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/R4"
android:checked="false"
android:textColor="#FFFFFFFF"
android:textSize="25dp" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Txt_preg"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="40dp"
android:textColor="#FFFFFFFF" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Imagen_p"
android:layout_below="@+id/Txt_preg"
android:layout_centerHorizontal="true"
android:clickable="false" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Iniciar"
android:id="@+id/btn_env"
android:layout_alignTop="@+id/radioGroup"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
198
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancelar"
android:id="@+id/btn_canc"
android:layout_below="@+id/btn_env"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Ítem_menu <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Transcribir"
android:id="@+id/text_menu"
android:layout_marginTop="43dp"
android:height="@dimen/abc_action_bar_default_height_material"
android:textSize="40dp"
android:textStyle="italic"
android:typeface="serif"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textColor="#fdfcfc"
android:background="#201d1d" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_men"
android:layout_below="@+id/text_menu"
android:layout_centerHorizontal="true"
android:src="@drawable/transcribir" />
</RelativeLayout>
Ítem_view <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imagen"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
199
android:layout_alignParentStart="true"
android:src="@drawable/b"
android:layout_toStartOf="@+id/Text_letra"
android:layout_alignBottom="@+id/Text_letra" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="letra"
android:id="@+id/Text_letra"
android:textSize="@android:dimen/notification_large_icon_height"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Music_menu <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:weightSum="1">
<ImageView
android:layout_width="175dp"
android:layout_height="184dp"
android:id="@+id/img_nota"
android:layout_gravity="right"
android:src="@drawable/musica" />
<ImageView
android:layout_width="match_parent"
android:layout_height="187dp"
android:id="@+id/Img_notab"
android:src="@drawable/musica" />
</LinearLayout>
</RelativeLayout>
Splash_screen <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Splash"
android:background="#111010">
<TextView
200
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:id="@+id/textView"
android:textStyle="normal|bold"
android:textSize="55dp"
android:theme="@style/AppTheme"
android:typeface="sans"
android:layout_centerHorizontal="true"
android:textColor="#f7f3f3"
android:layout_above="@+id/img_anim" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_anim"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:src="@drawable/appbraille" />
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_below="@+id/img_anim"
android:layout_alignLeft="@+id/img_anim"
android:layout_alignStart="@+id/img_anim"
android:layout_alignRight="@+id/img_anim"
android:layout_alignEnd="@+id/img_anim" />
</RelativeLayout>
Transc_layout <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@drawable/a"
android:layout_gravity="center" />
</RelativeLayout>