用条件更改图像

时间:2014-03-06 22:42:08

标签: java android android-image

我正在开发一个BMI计算器,其中质量状态显示不同的图像。

但我不知道怎么做,我在R.id.drawable上有错误 图片ID为“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;
}

}

感谢您的支持! :)

1 个答案:

答案 0 :(得分:1)

您应该将新图像设置为ImageView,如下所示:

imagem = (ImageView)findViewById(R.id.imageBody);
imagem.setImageResource(R.drawable.my_image);

另请注意,方法rgsexo.getCheckedRadioButtonId()不会为您提供R类的ID,而是您之前需要通过setId(int id)方法设置为按钮的ID,即在xml布局文件中。也许最好通过索引将组中的两个按钮区分开来,如下所示:

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

所以整个方法是:

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;
   }
}