# Programacion Multimedia ( Bor) ###### tags: `RET` ###### tags: `Borj` # JUEVES 21 OCTUBRE ***ANDROID STUDIO*** https://developer.android.com/studio NoxPlayer para poder emular Genymotion para poder emular recomendamos la api mas alta antes hay que tener configurado la imagen del dispositivo para poder depurar ## SDK C:\Users\Usuario\AppData\Local\Android\Sdk C:\Users\Usuario\AppData\Local\Android\Sdk\extras hay que instalar el sdk, avd (android visual studio) **Android SDK** sdk manager (descargamos el sdk 30 o 31) Android emulator Android SDK platform tools intel *86 emulator accelerator nos situamos en la ruta con la cmd Nos metemos dentro de la carpeta de android > dentro extras dir extras/intel/ para cuando de algun problema Dentro de la carpeta platform tools esta la herramienta llamada ADB(herramienta desde la consola hasta el telefono) C:\Users\Usuario\AppData\Local\Android\Sdk\extras\intel Por si tenemos algun problema C:\Users\Usuario\AppData\Local\Android\Sdk\platform-tools\adb.exe Herramienta desde la consola hasta el telefono virtualizado root ## AVD para movil virtual emulado ## NEW PROJECT Empty Activity (elegimos de plantilla para elegir un proyecto) Package name (tenerlo en cuenta) ![](https://i.imgur.com/k32QPxn.png) Cada Empty es una pantalla Las pantallas constan de: * Parte logica (.java) (Package Name>MainActiviy las clases) * parte grafica (.xml) Metodos minusculas clases mayusculas el .xml esta dentro de res>layout>activity_main.xml ![](https://i.imgur.com/lKoeoSI.png) Lanzadora y boton de home ![](https://i.imgur.com/fISpOM5.png) drawable = para imagenes layout = todas las partes graficas mipmap = graficos escalables values = colores y temas **CONECTAR BASE DE DATOS** jdb conector, el driver mysqldb conector .jar que se agrega al proyecto Gradle para conectarse a servidores, en el modulo se dicen las dependencias a descargar # Viernes 22 OCTUBRE ## GITHUB Crear repositorio Github para subir las practicas en privado descargar github desktop carpeta /documentos/repositorios Creamos un proyecto en android studio, en la nueva carpeta que hemos creado una de proyectos y otra de practicas clase ![](https://i.imgur.com/HPkdyGM.png) Un servicio es algo que se ejecuta en segundo plano, manda peticiones a un servidor y recoge en segundo plano ## Primer Proyecto onCreate = metodo que viene por defecto se asocia con el setconventview Clase R = se tiene todos los recursos para acceder a cualquier sitio, en la clase R se guardan numero se guardan enteros PRIMER PROYECTO POR DEFECTO TEMA03 (HELLO WORLD) ![](https://i.imgur.com/V65tARV.png) Poner en vertical ![](https://i.imgur.com/1YbRF9R.png) Quitamos el peso ![](https://i.imgur.com/ZH240to.png) wrapcontent se va a comportar en ancho lo que necesite segun el tamaño de las letras math parent se pega a las paredes ![](https://i.imgur.com/XmFOxA5.png) Terminamos el dia viernes ![](https://i.imgur.com/ISL8uTZ.png) # Lunes 25 Octubre Por mi cuenta para avanzar Github DevelopSys ## Layout No hace falta interfaz grafica agrupa distintas vistas en su interior hay distintos tipos de layout segun lo que queramos hacer **Linear layout** ```java= <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" android:layout_margin="20dp" tools:context="developandsystem.componentesinicial.LayoutActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:text="ELEMENTO 1" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:id="@+id/textView2" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:text="ELEMENTO 2" android:textAppearance="@style/TextAppearance.AppCompat.Large"/> </LinearLayout> ``` ![](https://i.imgur.com/pGqjqqc.png) Para ponerlo de manera horizontal hay que tener cuidado con el width ya que marca como se ensancha ```java= android:orientation="horizontal" ``` **Relative Layout** RelativeLayout se trata de un gestor del espacio que coloca los elementos con respecto al superior. De esta forma podemos colocar las cosas de forma más precisa, con la única restricción que todos los elementos tienen que tener asociado un ID para poder referirnos a ellos en las propiedades de colocación. Estas propiedades son las siguientes: android:layout_above android:layout_below android:layout_toLeftOf android:layout_toRightOf android:layout_alignLeft android:layout_alignRight android:layout_alignTop android:layout_alignBottom android:layout_alignBaseline android:layout_alignParentLeft android:layout_alignParentRight android:layout_alignParentTop android:layout_alignParentBottom android:layout_centerHorizontal android:layout_centerVertical android:layout_centerInParent **Frame Layout** Frame Layout es un gestor del espacio muy parecido a lo que es el CardLayout en Swing. Nos permite superponer capas una encima de otra con la posibilidad de mostrar todas al mismo tiempo o de mostrar solo una en específico, indicándoselo mediante la propiedad tag. Este layout es muy utilizado en los Fragments ya que estos aparecen y desaparecen en un mismo sitio dependiendo de la interacción del usuario. ```java= <?xml version="1.0" encoding="utf-8"?> <FrameLayout 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:orientation="horizontal" android:layout_margin="20dp" tools:context="developandsystem.componentesinicial.LayoutActivity"> <View android:layout_width="match_parent" android:layout_height="320dp" android:background="#9c9db3fa" android:tag="fondo"/> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/logo_frame" android:tag="logo"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Delevop & Sys" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textSize="50dp" android:gravity="center" android:layout_marginTop="240dp" android:fontFamily="casual" android:tag="letras"/> </FrameLayout> ``` ![](https://i.imgur.com/daGepX4.png) **Table Layout** El gestor del espacio TableLayout es una especialización de LinearLayout. Al igual que pasa en HTML, un TableLayout necesita la declaración de un TableRow para poder añadir una fila en la cual se situarán las vistas concretas, las cuales harán las veces de columnas. En concreto, cada vista que se añade a un TableRow va a parar a una columna diferente. Por ese motivo se suele decir que cada celda de un TableLayout sólo puede contener una vista. No obstante, nada impide que cualquiera de esas vistas sea un diseño y que contenga, a su vez otras vistas dentro. Hacer que las columnas aprovechen el espacio en su totalidad mediante la propiedad strechColumn o shrinkColum ```java= <?xml version="1.0" encoding="utf-8"?> <TableLayout 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:stretchColumns="*" tools:context=".TableActivity"> </TableLayout> ``` Declarar un par de filas dentro del layout. SE HACE CON TABLE ROW Estos elementos tienen como opción la configuración de alto y ancho. En este caso ocuparán en 50% cada una SE CREA TABLE LAYOUT Y DENTRO TABLE ROW ```java= <?xml version="1.0" encoding="utf-8"?> <TableLayout 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:stretchColumns="*" tools:context=".TableActivity"> <TableRow android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5"> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5"> </TableRow> </TableLayout> ``` Para escribir dentro de cada fila algo debe ser con TextView (puede ser texto o cualquier otro elemento) ```java= <?xml version="1.0" encoding="utf-8"?> <TableLayout 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:stretchColumns="*" tools:context=".TableActivity"> <TableRow android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5"> <TextView android:text="Elemento 1" android:textSize="20dp" /> <TextView android:text="Elemento 2" android:textSize="20dp" /> <TextView android:text="Elemento 3" android:textSize="20dp" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5"> <TextView android:text="Elemento 4" android:textSize="20dp" /> <TextView android:text="Elemento 4" android:textSize="20dp" /> </TableRow> </TableLayout> ``` Decir la posicion de un elemento por defecto sera de izquierda a derecha, habria que añadir esto a un elemento ```java= android:layout_column="2"/> ``` Que un elemento ocupe dos columnas con layout span ```java= android:layout_span="2" android:layout_gravity="center_horizontal"/> ``` EJEMPLO ```java= <?xml version="1.0" encoding="utf-8"?> <TableLayout 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:layout_margin="20dp" android:orientation="horizontal" android:stretchColumns="*" tools:context="developandsystem.componentesinicial.LayoutActivity"> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".25"> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="1" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="2" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="3" android:textSize="50dp" /> </TableRow> <TableRow android:layout_height="0dp" android:layout_weight=".25"> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="4" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="5" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="6" android:textSize="50dp" /> </TableRow> <TableRow android:layout_height="0dp" android:layout_weight=".25"> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="7" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="8" android:textSize="50dp" /> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:text="9" android:textSize="50dp" /> </TableRow> <TableRow android:layout_height="0dp" android:layout_weight=".25"> <Button style="@style/Base.Widget.AppCompat.Button.Borderless.Colored" android:layout_gravity="center_vertical" android:layout_span="3" android:text="=" android:textSize="50dp" /> </TableRow> </TableLayout> ``` ![](https://i.imgur.com/TQzGdod.png) **ConstraintLayout** Declarar el Constrain y darle propiedades ```java= <android.support.constraint.ConstraintLayout 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" xmlns:app="http://schemas.android.com/apk/res-auto"> </android.support.constraint.ConstraintLayout> ``` # Miercoles 27 de Octubre Tema 3 repaso Second y third activity Para traer elementos de parte grafica a parte java tienes que darle un id y es llamado con la clase R Creamos el String ![](https://i.imgur.com/4XtD1dL.png) Y lo apuntamos ![](https://i.imgur.com/R0BmDDa.png) Todas las pantallas se declaran en el android manifest CICLO DE VIDA ![](https://i.imgur.com/3NNMAs0.png) Logcat Se utiliza para encontrar el fallo concreto que puede dar al ejecutar la aplicacion (abajo a la izquierda) # Viernes 29 de Octubre Creamos el tercer Activity Third Activity y la ponemos como lanzadora ```java= <activity android:name=".ThirdActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` ![](https://i.imgur.com/0jZEHdu.png) ## Distintas Clases android:layout_width="match_parent" -----> se pega android:layout_height="match_parent" -----> se pega android:layout_margin="20dp" ------> un margen de 20 pixeles android:orientation="vertical" ------> orientacion vertical tools:context=".ThirdActivity" ------> nombre de la activity TEXTO android:layout_width="match_parent" ------> ANCHO se pega android:layout_height="wrap_content" ------> ALTURA lo que necesita android:text="Cambio de pantalla" ------> TEXTO android:textSize="30sp" ------> TAMAÑO TEXTO android:gravity="center" ------> GRAVITA EN EL CENTRO ???? android:layout_marginBottom="40dp" ------> MARGEN POR ABAJO android:layout_width="match_parent" ------> ANCHO se pega android:layout_height="wrap_content" ------> ALTURA lo que necesita android:id="@+id/edit_nombre" ------> SE LE DA UNA ID LA CUAL LUEGO SE UTILIZA PARA LLAMARLO ![](https://i.imgur.com/eVrylpx.png) match se pega wrap ocupa lo que tiene que ocupar ## EJERCICIO Aplicacion la cual te pido NOMBRE, APELLIDO, TELEFONO, y un CHECK de EXPERIENCIA. Luego todo se mandara a otra pagina y debe de aparecer todo recogido y de forma bonita. **PARTE LOGICA** Four Activity ```java= public class FourActivity extends AppCompatActivity { private TextView recuperar_nombre; private TextView recuperar_apellido; private TextView recuperar_telefono; private CheckBox recuperar_experiencia; private String nombre, apellido; private int telefono; private boolean experiencia; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_four); if (getIntent().getExtras() != null) { instancias(); recuperarDatos(); } } private void instancias(){ recuperar_nombre = findViewById(R.id.recuperar_nombre_grafico); recuperar_apellido = findViewById(R.id.recuperar_apellido_grafico); recuperar_telefono = findViewById(R.id.recuperar_telefono_grafico); recuperar_experiencia = findViewById(R.id.recuperar_experiencia_grafica); } private void recuperarDatos() { nombre = getIntent().getExtras().getString("nombre"); apellido = getIntent().getExtras().getString("apellido"); telefono = getIntent().getExtras().getInt("telefono"); experiencia = getIntent().getExtras().getBoolean("experiencia"); /*Log.v("test", nombre); Log.v("test", apellido);*/ recuperar_nombre.setText(nombre); recuperar_apellido.setText(apellido); recuperar_telefono.setText(String.valueOf(telefono)); recuperar_experiencia.setChecked(experiencia); } } ``` **PARTE GRAFICA** Fou ```java= <LinearLayout 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:orientation="vertical" tools:context=".FourActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="Nombre" android:textSize="25sp" /> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="" android:id="@+id/recuperar_nombre_grafico" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="Apellido" android:textSize="25sp" /> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="Lo que recibo" android:id="@+id/recuperar_apellido_grafico" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="Telefono" android:textSize="25sp" /> <TextView android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="Lo que recibo" android:id="@+id/recuperar_telefono_grafico" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/recuperar_experiencia_grafica" android:text="Experiencia" android:checked="false" android:layout_marginBottom="40dp" /> </LinearLayout> </LinearLayout> ``` Android Manifest En el android manifest le indicamos cual va a ser la launcher (lanzadora) ```java= <activity android:name=".ThirdActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` Third Activity ![](https://i.imgur.com/lc6FZGE.png) Traer de la parte grafica a la parte logica # Miercoles 3 de Noviembre En vez de pasar distintos nombre, apellido, telefono. Pasaremos un objeto con todo ello. Crear un nuevo paquete ![](https://i.imgur.com/Uo8RLMB.png) Boton derecho getter and setter Creamos un constructor con todo Serializacion EJERCICIO https://github.com/DevelopSys/ClasePMDM/blob/master/T3/codigos2122/T03_RepasoDos/app/src/main/java/com/example/t03_repaso/ThirdActivity.java # Viernes 5 de Noviembre Incluimos imagen en la practica JUEGO DE CARTAS (PRACTICA) MENU A GAMEA c Para poner imagenes que vienes por defecto en android android:drawableLeft="@android:drawable/ic_menu_directions" ![](https://i.imgur.com/fAbeIkF.png) ![](https://i.imgur.com/UkxvmZW.png) # Jueves 18 de Noviembre Cambiar el idioma de la aplicacion dependiendo del la region del cliente Cambiar la aplicacion dependiendo de la orientacion. # Viernes 19 de Noviembre Continuamos haciendo practicas # Lunes 22 Noviembre Ejercicio Elementos, Toggle # Explicaciones PRACTICAS ## PRACTICA JUEGOCARTAS ## PRACTICA ALEATORIOS Para poner el fondo transparente android:background="@android:color/transparent" Aprender a inicializar un ArrayList https://www.geeksforgeeks.org/initialize-an-arraylist-in-java/ Método que devuelve true en el caso de que el tamaño de la cadena sera 0. En otro caso devuelve false. (!nombre.getText().toString().isEmpty()) ## PRACTICA CALCULADORA ## Preguntas Porque los botones de aleatorio no estan en blacno y como podria cambiar el color android:background="@android:color/transparent" Avisar de la aplicacion juego de cartas la has movido y por eso sale algo raro esta igualado al principio a 1 y no a 0 has hecho el ejercicio con los tables row, comentarselo llego la peticion del github # Lunes 29 de Noviembre Listas (se va pasando) Spinner (desplegable) # Miercoles 1 de Diciembre Adaptador Spiner, en la carptera de Listas > adapters Imagenes de los coches cambiar el nombre del coche que es default cambiar el nombre por defecto # Jueves 2 de Diciembre Creo graficamente el spiner hago el base adapter asocio los elementos rellenar la lista # ***SEGUNDO TRIMESTRE*** # 28 ENERO 2022 Repaso de Dialogos # 31 ENERO 2022 onCreate dialog set tittle uilder.setitems(opciones, new dialogo interfaces) # 2 FEBRERO 2022 Crear xml Interfaces de collback, se ejecuta algo en un lugar distinto al que esta definido 1- creo interfaz en el origen de los datos (guardo mayusculas y minusculas) 2- origen uso el met donde se realiza la comunic 3- destino implemento interfaz y escribo metodo ```java= Public interfaz onDialogoListener{ void onDialogoSelected(string n); } ``` app:showAsAction="ifRoom"> para que apareza fuera de los puntitus ## 9 FEBRERO 2022 FRAGMENTS Implemeto metodo, el contexto seria el main activity atrae las horas, time picker time picker int 1, int i1; calendar.getinstance -> sao el calendario actual de la maquina calendar_hour_of_day -> CALENDARIO FECHA en el destino de la comunicacion siempre hay que implementar la interfaz https://www.develou.com/timepicker-en-android/ ## 18 FEBRERO 2022 en el main activity lo indicamos cuando queremos saltar la accion, que nos salte el new sant y nos ponga el nuevo fragmento cambiamos fragment con replace, le indicamos primero el lugar donde queremos hacer el cambio y el segundo parametro el fragmentodinamicodos.newinstance(elusuario que me ha indicado) siempre despues de esto se pone el commit(garantiza la accion) EJERCICIO ---------------------- recyclerview que pintaba los jugadores del streetfighter, al pulsar en vez de cambiar de pantalla, que nos haga la misma accion pero que lo haga con fragments, que nos salga un fragment por encima con los datos de cada jugador.