Semana 5
Semana 5
Semana 5
Herramientas de
Programación Móvil
Semana 5
MainActivity
package com.example.jose_cavero_semana_5
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import android.animation.ObjectAnimator
import android.view.animation.LinearInterpolator
import android.widget.ImageView
2
EVALUACIÓN
// ANIMACION DE IMAGEN
val imageView: ImageView = findViewById(R.id.imageView2)
// Inicia la animación
objectAnimator.start()
3
EVALUACIÓN
activity_main.xml
<TextView
android:id="@+id/bien"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:layout_marginBottom="10dp"
android:text="!Bienvenidos!"
android:textAlignment="center"
android:textSize="34sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/imageView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="55dp"
android:layout_marginTop="89dp"
android:layout_marginEnd="56dp"
android:layout_marginBottom="30dp"
app:layout_constraintBottom_toTopOf="@+id/button1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bien"
4
EVALUACIÓN
app:srcCompat="@drawable/falabella" />
<Button
android:id="@+id/button2"
android:layout_width="168dp"
android:layout_height="60dp"
android:layout_marginStart="122dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="122dp"
android:layout_marginBottom="18dp"
android:backgroundTint="#CDDC39"
android:text="Vendedor Destacado"
app:layout_constraintBottom_toTopOf="@+id/button3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button1" />
<Button
android:id="@+id/button1"
android:layout_width="168dp"
android:layout_height="52dp"
android:layout_marginStart="122dp"
android:layout_marginTop="107dp"
android:layout_marginEnd="122dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#CDDC39"
android:text="Vendedores"
app:layout_constraintBottom_toTopOf="@+id/button2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<Button
android:id="@+id/button3"
android:layout_width="168dp"
android:layout_height="52dp"
android:layout_marginStart="121dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="122dp"
android:layout_marginBottom="107dp"
android:backgroundTint="#CDDC39"
android:text="Ventas"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button2" />
</androidx.constraintlayout.widget.ConstraintLayout>
5
EVALUACIÓN
- Debe contar con una opción para capturar una foto y guardarla (utilizando la cámara) del
vendedor destacado.
AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"
android:required="false" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
6
EVALUACIÓN
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Jose_Cavero_Semana_5"
tools:targetApi="31">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.android.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<activity
android:name=".item_list2"
android:exported="false" />
<activity
android:name=".MainActivity4"
android:exported="false" />
<activity
android:name=".MainActivity3"
android:exported="false" />
<activity
android:name=".MainActivity2"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
7
EVALUACIÓN
MainActivity3.kt
package com.example.jose_cavero_semana_5
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.view.View
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Date
companion object {
private const val CAMERA_PERMISSION_CODE = 101
private const val CAMERA_REQUEST_CODE = 102
}
photoButton = findViewById(R.id.button6)
photoImageView = findViewById(R.id.photoImageView)
photoButton.setOnClickListener {
if (checkCameraPermission()) {
dispatchTakePictureIntent()
} else {
requestCameraPermission()
}
}
}
9
EVALUACIÓN
activity_main3.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity3">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="623dp"
android:text="Vendedor Destacado"
android:textAllCaps="true"
android:textSize="34sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
10
EVALUACIÓN
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button5" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="313dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="7dp"
android:backgroundTint="#CDDC39"
android:text="Inicio"
app:layout_constraintBottom_toTopOf="@+id/textView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="191dp"
android:layout_marginBottom="15dp"
android:text="Tomar Foto"
app:layout_constraintBottom_toTopOf="@+id/textView2"
app:layout_constraintEnd_toStartOf="@+id/button5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/photoImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/button6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:scaleType="fitCenter"
android:visibility="gone"/> <!-- Establece la visibilidad
inicial en "gone" -->
</androidx.constraintlayout.widget.ConstraintLayout>
11
EVALUACIÓN
- Debe contar con una opción la cual exponga un gráfico con los vendedores y su cantidad de
ventas.
activity_main4.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity4">
<TextView
12
EVALUACIÓN
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="152dp"
android:layout_marginTop="46dp"
android:layout_marginBottom="19dp"
android:text="Ventas"
android:textAlignment="center"
android:textSize="34sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="50dp"
android:layout_marginBottom="58dp"
android:backgroundTint="#CDDC39"
android:text="inicio"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="392dp"
android:layout_height="567dp"
android:layout_marginTop="19dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
tools:context=".MainActivity">
<EditText
android:id="@+id/Concepto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
13
EVALUACIÓN
android:hint="Concepto"
android:inputType="text" />
<EditText
android:id="@+id/etCantidad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:hint="Cantidad"
android:inputType="number" />
<Button
android:id="@+id/btnagregar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="AGREGAR" />
<com.echo.holographlibrary.BarGraph
android:id="@+id/graphBar"
android:layout_width="match_parent"
android:layout_height="245dp"
android:layout_margin="16dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity4.kt
package com.example.jose_cavero_semana_5
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.echo.holographlibrary.Bar
import com.echo.holographlibrary.BarGraph
import
com.example.jose_cavero_semana_5.databinding.ActivityMain4Binding
import kotlin.math.roundToInt
14
EVALUACIÓN
super.onCreate(savedInstanceState)
binding = ActivityMain4Binding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnagregar.setOnClickListener {
graficarBarras(puntos)
}
}
puntos.add(barra)
binding.graphBar.bars = puntos
}
return color
15
EVALUACIÓN
}
}
- Debe contener un listado de vendedores, donde se incluya su foto, nombre y área a la cual
pertenece (mínimo 5 vendedores).
- Al seleccionar al tercer vendedor del listado debe reproducir un audio.
16
EVALUACIÓN
activity_maim2.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity2">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="50dp"
android:layout_marginBottom="55dp"
android:text="Lista de Vendedores"
android:textAlignment="center"
android:textSize="34sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/button4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout"
/>
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="389dp"
android:layout_height="474dp"
tools:context=".MainActivity2"
tools:layout_editor_absoluteX="6dp"
tools:layout_editor_absoluteY="69dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
17
EVALUACIÓN
android:padding="16dp" />
</RelativeLayout>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="291dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#CDDC39"
android:text="Inicio"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity2.kt
package com.example.jose_cavero_semana_5
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
18
EVALUACIÓN
// Configurar el RecyclerView
val recyclerView: RecyclerView =
findViewById(R.id.recyclerView2)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = MyAdapter2(dataList)
}
itemlist2.kt
package com.example.jose_cavero_semana_5
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
activity_item_list2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
19
EVALUACIÓN
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp">
<ImageView
android:id="@+id/imageView2"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="centerCrop"
android:src="@drawable/default_image" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/textName2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nombre"
android:textSize="18sp" />
<TextView
android:id="@+id/textArea2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Área"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
Y un adaptador
MyAdapter2.kt
package com.example.jose_cavero_semana_5
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
20
EVALUACIÓN
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
holder.imageView.setImageResource(item.imageResId)
holder.textName.text = item.name
holder.textArea.text = item.area
}
21
EVALUACIÓN
Se utilizan elementos multimedia, como imágenes, para representar visualmente cada elemento
de la lista de vendedores en la aplicación. Estas imágenes son mostradas en el ImageView definido
en el archivo item_list2.xml. En este caso, se ha establecido un ImageView con la referencia
R.id.imageView2 en la vista de cada elemento de la lista (item_list2.xml). La clase MyAdapter2.kt se
encarga de cargar estas imágenes utilizando la clase ViewHolder.
2. ¿En cuáles requerimientos se debe utilizar Media Store? Justifica su utilización dentro de
la aplicación desarrollada.
Media Store es una base de datos centralizada de metadatos de medios que se utiliza comúnmente
para acceder y organizar archivos multimedia en dispositivos Android.
Se debe utilizar Media Store en la aplicación desarrollada cuando se requiera acceder a la galería
de imágenes o archivos multimedia almacenados en el dispositivo.
Si la aplicación permite a los usuarios seleccionar imágenes de su galería o almacenamiento
interno, Media Store proporciona una interfaz segura y eficiente para acceder a estos recursos
multimedia.
3. ¿Qué elementos fueron necesarios para desplegar el gráfico requerido? Enumera los pasos
necesarios para su utilización en la aplicación desarrollada.
RecyclerView
Permite mostrar una lista de elementos en una disposición vertical.
MyAdapter2
Una clase personalizada que extiende RecyclerView.Adapter, responsable de manejar la lógica de
visualización de la lista y vincular los datos a las vistas.
item_list2.xml
Define la apariencia de cada elemento en la lista, incluidos los elementos multimedia como
ImageView para la imagen.
ListItem
Una clase de datos que representa un elemento en la lista, con propiedades como imageResId para
la imagen, name para el nombre, y area para la categoría.
22
EVALUACIÓN
23
EVALUACIÓN
REFERENCIAS BIBLIOGRÁFICAS
dev.xcheko51x. Creación de gráfica de barras con Librería HoloGraph en Kotlin y Android Studio
Recuperado de: https://www.youtube.com/watch?v=ToUqJz1cDVI&t=4s
Developer David González. Cómo utilizar ListView en Android Studio con Kotlin - Parte 1
Recuperado de: https://www.youtube.com/watch?v=rGfT_4PJ-Ok
MoureDev by Brais Moure. Cómo AÑADIR ANIMACIONES en Android Studio | Lottie Tutorial
Recuperado de: https://www.youtube.com/watch?v=h3ppaE8fBsQ&t=266s
24