Question

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! :)

Was it helpful?

Solution

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;
   }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top