0

我正在尝试根据传感器输入更新文本视图 - 更精确的音高。我可以毫无问题地获取传感器数据,将其转换为度数并将其显示在文本视图中。问题是,基于度数的音高,我不想显示不同的数字。我写了一个 if-else if 语句并将它放在 onsensorchanged 中,但除了初始数字之外它不会更新。

     @Override


public void onSensorChanged(SensorEvent event) {

  switch(event.sensor.getType()){
  case Sensor.TYPE_ACCELEROMETER:
   for(int i =0; i < 3; i++){
    valuesAccelerometer[i] = event.values[i];
   }
   break;
  case Sensor.TYPE_MAGNETIC_FIELD:
   for(int i =0; i < 3; i++){
    valuesMagneticField[i] = event.values[i];
   }
   break;
  }

  boolean success = SensorManager.getRotationMatrix(
       matrixR, 
       matrixI, 
       valuesAccelerometer, 
       valuesMagneticField);

  if(success){
   SensorManager.getOrientation(matrixR, matrixValues);

// Float to double
   double pitch = Math.toDegrees(matrixValues[1]);
// 1 decimal
    pitch = Math.abs(round(pitch, 0));

//set textview vinkel to degrees
  vinkel.setText(String.valueOf(pitch));

// find tubesize from edittext
  String tubesizestring = tubesize.getText().toString();



  if(tubesizestring=="1000"){

      if(pitch>=0.6){
          kwh.setText("2,69");
      }else if(pitch>=1.0){
          kwh.setText("3,47");
      }else if(pitch>=2.0){
          kwh.setText("4,90");
      }else if(pitch>=5.0){
          kwh.setText("7,75");
      }else if(pitch>=10.0){
          kwh.setText("10,96");
      }else if(pitch>=20.0){
          kwh.setText("15,50");
      }else if(pitch>=30.0){
          kwh.setText("18,99");
      }else{
          kwh.setText("more than 30 degrees");

      }
  }
  }

我希望很清楚我想要做什么。其他请询问

希望有人能指出我正确的方向

4

1 回答 1

0

它不起作用,因为您的逻辑存在根本缺陷。让我们假设音高在25. 它大于0.6等等1.0。所以显然只有第一个if语句会被看到,因为其他语句是else if语句。为了让它工作,改变语句的顺序。

    if(pitch>=30.0){
      kwh.setText("18,99");
  }else if(pitch>=20.0){
      kwh.setText("15,50");
  }else if(pitch>=10.0){
      kwh.setText("10,96");
  }else if(pitch>=5.0){
      kwh.setText("7,75");
  }else if(pitch>=2.0){
      kwh.setText("4,90");
  }
else if(pitch>=1.0){
      kwh.setText("3,47");
  }
  else if(pitch>=0.6){
      kwh.setText("2,69");
  }eelse{
      kwh.setText("more than 30 degrees");
于 2013-05-05T13:34:50.667 回答