Reputation: 185
i'm developing a BMI calculator where which mass state show a diferent image.
But i don't know how to do it and i'm having an error on the R.id.drawable The image id is "imageBody".
package com.example.calculadorimc;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private RadioGroup rgsexo;
EditText editPeso;
EditText editAltura;
TextView imcView;
SeekBar alterarAltura;
SeekBar alterarPeso;
ImageView imagem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editPeso = (EditText)findViewById(R.id.editPeso);
editAltura = (EditText)findViewById(R.id.editAltura);
imcView = (TextView)findViewById(R.id.imcView);
alterarAltura = (SeekBar)findViewById(R.id.alterarAltura);
alterarPeso = (SeekBar)findViewById(R.id.alterarPeso);
imagem = (ImageView)findViewById(R.id.imageBody);
alterarAltura.setOnSeekBarChangeListener(alteraralturaListener);
alterarPeso.setOnSeekBarChangeListener(alterarpesoListener);
}
private OnSeekBarChangeListener alteraralturaListener = new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
double setAltura = (alterarAltura.getProgress()) * .01d;
// mostra na caixa o valor novo
editAltura.setText(String.format("%.02f", setAltura).replace(',', '.'));
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
};
private OnSeekBarChangeListener alterarpesoListener = new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
// Calcula o novo valor do TIP
int setPeso = (alterarPeso.getProgress());
// mostra na caixa o valor novo
editPeso.setText(String.valueOf(setPeso));
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
};
public void calculateClickHandler(View view) {
// make sure we handle the click of the calculator button
if (view.getId() == R.id.botaoCalcular) {
// get the users values from the widget references
float peso = Float.parseFloat(editPeso.getText().toString());
float altura = Float.parseFloat(editAltura.getText().toString());
// calculate the bmi value
float imcValue = calcularIMC(peso, altura);
// interpret the meaning of the bmi value
String imcInterpretation = interpretIMC(imcValue);
// now set the value in the result text
imcView.setText(String.format("%.02f", imcValue).replace(',', '.') + "-" + imcInterpretation);
}
}
// the formula to calculate the BMI index
// check for http://en.wikipedia.org/wiki/Body_mass_index
private float calcularIMC (float peso, float altura) {
return (float) (peso / (altura * altura));
}
// interpret what BMI means
private String interpretIMC(float imcValue) {
imagem = (ImageView)findViewById(R.id.imageBody);
int res;
rgsexo = (RadioGroup)findViewById(R.id.rgSexo);
int selectedId = rgsexo.getCheckedRadioButtonId(); // get the id
switch (selectedId) // switch on the button selected
{
case R.id.radioMasc:
if (imcValue < 20) {
res = r.drawable.slim;
return "Abaixo do Peso";
} else if (imcValue < 24.9) {
res = r.drawable.normal;
return "Peso Normal";
} else if (imcValue < 29.9) {
res = r.drawable.fat;
return "Acima do Peso";
} else if (imcValue < 39.9) {
res = r.drawable.fat;
return "Obesidade Moderada";
} else {
res = r.drawable.fat;
return "Obesidade Mórbida";
}
case R.id.radioFem:
if (imcValue < 19) {
return "Abaixo do Peso";
} else if (imcValue < 23.9) {
return "Peso Normal";
} else if (imcValue < 28.9) {
return "Acima do Peso";
} else if (imcValue < 38.9) {
return "Obesidade Moderada";
} else {
return "Obesidade Mórbida";
}
}
return null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Thanks for all your support! :)
Upvotes: 0
Views: 128
Reputation: 8979
You should set the new image to the ImageView
like this:
imagem = (ImageView)findViewById(R.id.imageBody);
imagem.setImageResource(R.drawable.my_image);
Also note that method rgsexo.getCheckedRadioButtonId()
doesn't give you an id from R class, but the id you need to set to the button via setId(int id)
method before, i.e. in xml layout file. Maybe it's better to differ your two buttons in group via index as follows:
int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);
So the whole method would be:
private String interpretIMC(float imcValue) {
imagem = (ImageView)findViewById(R.id.imageBody);
rgsexo = (RadioGroup)findViewById(R.id.rgSexo);
int selectedId = rgsexo.getCheckedRadioButtonId(); // get the id
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);
switch (idx) // switch on the button selected
{
case 0:
if (imcValue < 20) {
imagem.setImageResource(R.drawable.slim);
return "Abaixo do Peso";
} else if (imcValue < 24.9) {
imagem.setImageResource(R.drawable.normal);
return "Peso Normal";
} else if (imcValue < 29.9) {
imagem.setImageResource(R.drawable.fat);
return "Acima do Peso";
} else if (imcValue < 39.9) {
imagem.setImageResource(R.drawable.fat);
return "Obesidade Moderada";
} else {
imagem.setImageResource(R.drawable.fat);
return "Obesidade Mórbida";
}
break;
case 1:
if (imcValue < 19) {
return "Abaixo do Peso";
} else if (imcValue < 23.9) {
return "Peso Normal";
} else if (imcValue < 28.9) {
return "Acima do Peso";
} else if (imcValue < 38.9) {
return "Obesidade Moderada";
} else {
return "Obesidade Mórbida";
}
break;
}
}
Upvotes: 1