Crie um Aplicativo IMC para Android
Gilber
Posted on December 9, 2022
Neste tutorial vamos criar um aplicativo para calcular o índice de massa corporal, conhecido pela sigla de IMC é um cálculo que permite medir se alguém está ou não com o peso ideal a partir das entradas dos dados do indivíduo como peso e altura. O Aplicativo exibirá o resultado do IMC e a classificação do resultado conforme tabela da organização mundial de saúde. A aplicação será desenvolvida na linguagem de programação kotlin junto com a ferramenta de UI do Google jetpack compose e IDE Android Studio.
Pré-requisitos
- Linguagem de programação kotlin - básico
- Logica de programação
Ferramentas
- IDE Android Studio versão 2021.3.1 ou mais recente
O que você apreenderá
- Criar um projeto com jetpack compose
- Manipular entrada e saída de dados
o que é jetpack compose
É um kit de ferramentas moderno recomendado pelo Android para criar IUs nativas. Ele simplifica e acelera o desenvolvimento da IU no Android. Dê vida ao seu app rapidamente com menos código, ferramentas eficientes e APIs Kotlin intuitivas.
Formula para calcular Índice de Massa Corporal
IMC = Peso / altura²
Vamos iniciar o desenvolvimento do projeto
Abra a IDE Android Studio e clique em New Project
Na janela New Project, selecione Empty Compose Activity e clique em Next.
Dê o nome a aplicação de CalculatorIMC e clique em Finish
Projeto está pronto para receber as linhas de código do nosso App
No pacote res, escolha values, abra o arquivo **string.xml" e crie as Strings do App
resources>
<!--Nome da aplicacação-->
<string name="app_name">CalculatorIMC</string>
<!--Titulo da tela principal do App-->
<string name="title_home">IMC - Calculadora do Índice de Massa Corporal</string>
<!--Texto para entrada de dados peso e altura-->
<string name="text_peso">Informe o Peso (Ex:80.0)</string>
<string name="text_altura">Informe Altura (Ex: 1.70)</string>
<!--Texto dos botões-->
<string name="buttom_clean">Limpar</string>
<string name="buttom_calculator">Calcular IMC</string>
</resources>
Tela da calculadora
Função Composable
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun HomeImc() {
//Declaração da varivéis para entrada de dados conforme regra
var peso by remember { mutableStateOf("") }
var altura by remember { mutableStateOf("") }
var result_imc by remember { mutableStateOf("") }
var show by remember { mutableStateOf(false) }
val context = LocalContext.current
val requestFocus = FocusRequester()
//aplicar uma margens e alinhar os campos
Column(modifier = Modifier
.fillMaxWidth()
.padding(all = 15.dp),
horizontalAlignment = Alignment.CenterHorizontally){
//campos para entrada de dados: Peso
OutlinedTextField(
modifier = Modifier.focusRequester(requestFocus),
value = peso,
onValueChange = { peso = it },
label = { Text(text = stringResource(id = R.string.text_peso), fontWeight = FontWeight.Bold,color = Color.White, fontSize = 21.sp)},
placeholder = { Text(text = stringResource(id = R.string.text_exemple_peso), color = Color.White)},
textStyle = TextStyle(fontSize = 21.sp, fontWeight = FontWeight.Medium, color = Color.White),
leadingIcon = { Icon(tint = Color.White, painter = painterResource(id = R.drawable.ic_peso), contentDescription = "Peso") },
colors = TextFieldDefaults.outlinedTextFieldColors(
focusedBorderColor = Color.Transparent,
unfocusedBorderColor = Color.Transparent,
cursorColor = Color.White
),
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Next
),
singleLine = true
)
Space1()
//campos para entrada de dados: Altura
OutlinedTextField(
value = altura,
onValueChange = { altura = it },
label = { Text(text = stringResource(id = R.string.text_altura), fontWeight = FontWeight.Bold, color = Color.White, fontSize = 21.sp) },
placeholder = { Text(text = stringResource(id = R.string.text_exemple_altura), color = Color.White) },
textStyle = TextStyle(fontSize = 21.sp, fontWeight = FontWeight.Medium, color = Color.White),
leadingIcon = { Icon(tint = Color.White, painter = painterResource(id = R.drawable.ic_altura), contentDescription = "altura")},
colors = TextFieldDefaults.outlinedTextFieldColors(
focusedBorderColor = Color.Transparent,
unfocusedBorderColor = Color.Transparent,
cursorColor = Color.White
),
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions {
if (peso.isNotEmpty() && altura.isNotEmpty()) {
//Ação no teclado
result_imc = calculatorImc(peso,altura)
show = true
} else {
Toast.makeText(context,"Preencha os campos",Toast.LENGTH_LONG).show()
requestFocus.requestFocus()
}
},
singleLine = true
)
Space1()
//Button Criação de evento
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly){
OutlinedButton(
onClick = {
peso = ""
altura = ""
show = false
requestFocus.requestFocus()
}) {
Text(text = stringResource(id = R.string.buttom_clean))
}
OutlinedButton(
onClick = {
if (peso.isNotEmpty() && altura.isNotEmpty()) {
//Ação
result_imc = calculatorImc(peso,altura)
show = true
} else {
Toast.makeText(context,"Preencha os campos",Toast.LENGTH_LONG).show()
requestFocus.requestFocus()
}
}) {
Text(text = stringResource(id = R.string.buttom_calculator))
}
}
//saida de dados: resultado animação
//Resultado
AnimatedVisibility(
visible = show,
enter = scaleIn() + expandVertically(expandFrom = Alignment.CenterVertically),
exit = scaleOut() + shrinkVertically(shrinkTowards = Alignment.CenterVertically)
) {
Text(
text = result_imc,
style = MaterialTheme.typography.h4,
fontWeight = FontWeight.Bold,
color = Color.White)
}
}
}
Função para calcular IMC com base na formula
//Função para calcular IMC retornando uma string
fun calculatorImc(weight: String, height: String):String {
//Receber dados de entrada e converter em double
val peso = weight.toDouble()
val altura = height.toDouble()
//Processamento: formula para o calculo do IMC
val calculeImc = peso / (altura*altura)
//Formatar Numero
val resultFormt: Double = String.format("%.1f", calculeImc).toDouble()
//Função para classificação IMC: Recebi por parametro o resultado do
// calculo já convertido em double e retorna uma String com resultado da
//classificação
return classificationImc(resultImc = resultFormt)
}
função para classificar o resultado do IMC
//função para classificar o resultado do IMC: Recibe no para o Double
fun classificationImc(resultImc: Double):String{
var resulClassificationtImc = ""
//Classificação conforme tabela da OMS a partir do IMC
if (resultImc <18.5f){
//MENOR QUE 18,5 -> Baixo pesso - Baixo
resulClassificationtImc = "Baixo Peso"
}else{
if (resultImc>=18.5 && resultImc <24.9){
//ENTRE 18,5 E 24,9 -> Normal - Adequado
resulClassificationtImc = "Peso Adequado"
}else{
if (resultImc == 25.0){
//Igual a 25 -> Normal - Risco
resulClassificationtImc = "Risco de SobrePeso"
}else{
if (resultImc > 25 && resultImc<=29.9){
//ENTRE 25,0 E 29,9 -> Sobrepreso Aumentado
resulClassificationtImc = "Pré-Obeso"
}else{
if(resultImc>=30 && resultImc<=34.9){
//ENTRE 30,0 E 34,9 -> Obesidade - Moderado
resulClassificationtImc = "Obesidade GRAU I"
}else{
if (resultImc>=35 && resultImc<=39.9){
//ENTRE 35,0 E 39,9 -> Obesidade Mórbida - Grave
resulClassificationtImc = "Obesidade GRAU II"
}else{
//resultImc > 40
//Igual ou Maior 40 -> Obesidade Mórbida - Muito Grave
resulClassificationtImc = "Obesidade GRAU III"
}
}
}
}
}
}
return "Seu Imc É: ${resultImc}\n\n"+resulClassificationtImc+"\n"
}
Resultado final
Repositório Calculador IMC
Posted on December 9, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024