2013-04-22 3 views
2

Я пытаюсь сделать приложение, чтобы изменить цвет кнопок с помощью датчика приближения.Датчик приближения для изменения кнопки Цвет

Я не знаю, как его изменить на части onSensorChanged. Должен ли я импортировать цвет и реализовывать разные состояния цвета? Я немного смущен.

Вот мой код:

public class MainProxmityActivity extends Activity implements SensorEventListener { 

Button proximidade; 
SensorManager Sm; 
Sensor ProxSensor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_proxmity); 

    Sm = (SensorManager) getSystemService (SENSOR_SERVICE); 
    ProxSensor = Sm.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    proximidade = (Button) findViewById(R.id.btn_proximidade); 

    Sm.registerListener(this, ProxSensor, SensorManager.SENSOR_DELAY_NORMAL); 

} 

@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_proxmity, menu); 
    return true; 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    proximidade.setBackgroundColor(getTitleColor("bd4c31")); 
} 

} 

Надежда вопрос ясен.

ответ

2

Устройства Android имеют связку датчиков, поэтому код onSensorChanged() обычно имеет оператор switch для выбора интересующего датчика. В частности, датчик приближения возвращает значение поплавка, которое обозначает близость (например, < 1.0 «близко», если максимальный диапазон датчика составляет 5,0). Попробуйте что-то вроде этого:

int mColor; 
public void onSensorChanged(SensorEvent event) { 
    switch (event.sensor.getType()) { 
    case Sensor.TYPE_PROXIMITY: 
     if (event.values[0] < 1.0f) { 
      if (mColor != Color.GREEN) { 
       mColor = Color.GREEN; 
       proximidade.setBackgroundColor(Color.GREEN); 
      } 
     } 
     else { 
      if (mColor != Color.WHITE) { 
       mColor = Color.WHITE; 
       proximidade.setBackgroundColor(Color.WHITE); 
      } 
     } 
     break; 
    } 
} 

Не забудьте зарегистрировать слушателя вашего бесконтактного датчика в вашем OnStart() код с чем-то вроде этого:

mSensorManager.registerListener(mViewWithSensorListener, s, SensorManager.SENSOR_DELAY_NORMAL) 

разрегистрировать Также слушателя в свой бесконтактный датчик в вашем OnStop() с чем-то вроде этого:

mSensorManager.unregisterListener(mViewWithSensorListener); 
+0

Hi @gregS Спасибо за ваш вклад в помощь мне. Очень доволен. У меня есть вопрос, связанный с тем, что вы сказали о кодах onStart() и onStop(). Связано ли это с onSensorChanged() и onAccuracyChanged(), соответственно? Я попытался сделать это, как вы сказали, но, похоже, это не работает, хотя ошибок нет. вот код: –

+0

общественности недействительным onAccuracyChanged (датчик Sensor, внутр точность) { \t \t Sm.unregisterListener (mViewWithSensorListener);} \t общественного недействительными onSensorChanged (SensorEvent событие) { \t \t \t \t Sm.registerListener (mViewWithSensorListener, это так, как вы регистрируетесь и не слышите слушателя? –

+0

Поскольку точность датчика приближения вашего устройства не изменится, нет смысла переопределять onAccuracyChanged() для него. С другой стороны, на AccuracyChanged() часто используется для датчиков местоположения. Надеюсь, это поможет. – gregS

Смежные вопросы