java - 根据条件更改图像

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

}

感谢大家的支持! :)

最佳答案

您应该将新图像设置为 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;
   }
}

关于java - 根据条件更改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22237752/

相关文章:

Java URL 在计时器上抓取股票报价

android - 异步任务 Android 中的 java.util.concurrent.RejectedExecutionException

android - 无法在 Ubuntu 14.04 上添加 cordova 平台 android

android - 从图库文件路径中选择图像返回 NULL

java - Gradle构建错误

java - 任务 ':compileJava' 执行失败。 > 无效源版本 : 1. 7

android - Android 中的动画图像淡入淡出导致黑屏

android - 如何设置使用默认 Android 图像查看器查看位图的 Intent ?

java - 如何在 Java 中将对象转换为 JTable

Android:图像相似度api