2014-03-06 148 views
0

我正在開發一個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; 
} 

} 

感謝您的支持! :)

+0

「r.drawable.slim;」 R應該大寫正確嗎?要改變圖像,你做imagem.setImageResource(R.drawable.something) – Gak2

回答

1

您應該將新圖像設置爲ImageView這樣的:

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

還要注意方法rgsexo.getCheckedRadioButtonId()不給你從R類別的標識,但標識需要設置爲按鈕通過setId(int 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; 
    } 
} 
+0

非常感謝...這是比我想象的更加:) –