Android 更改按钮颜色的接近传感器
我正在尝试制作一个应用程序,使按钮的颜色随着接近传感器的变化而变化 我不知道如何在sensorchanged部分更改它。我必须导入颜色并实现不同的颜色状态吗?我有点困惑 这是我的密码:Android 更改按钮颜色的接近传感器,android,Android,我正在尝试制作一个应用程序,使按钮的颜色随着接近传感器的变化而变化 我不知道如何在sensorchanged部分更改它。我必须导入颜色并实现不同的颜色状态吗?我有点困惑 这是我的密码: public class MainProxmityActivity extends Activity implements SensorEventListener { Button proximidade; SensorManager Sm; Sensor ProxSensor; @Override prot
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"));
}
}
希望问题清楚。Android设备有一组传感器,因此onSensorChanged()代码通常有一个switch语句来选择感兴趣的传感器。特别是,接近传感器返回表示接近的浮点值(例如,如果传感器的最大范围为5.0,<1.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;
}
}
mSensorManager.registerListener(mViewWithSensorListener, s, SensorManager.SENSOR_DELAY_NORMAL)
mSensorManager.unregisterListener(mViewWithSensorListener);
在onStop()代码中,还可以使用以下方法将侦听器注销到接近传感器:
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;
}
}
mSensorManager.registerListener(mViewWithSensorListener, s, SensorManager.SENSOR_DELAY_NORMAL)
mSensorManager.unregisterListener(mViewWithSensorListener);
嗨@gregS谢谢你对我的帮助。非常感激。我有一个问题与您所说的onStart()和onStop()代码有关。这是否分别与onSensorChanged()和onAccuracyChanged()有关?我试着按照你说的去做,但似乎不起作用,尽管没有错误。下面是代码:public void onAccuracyChanged(Sensor-Sensor,int-accurity){Sm.unregisterListener(mViewWithSensorListener);}public void onSensorChanged(SensorEvent事件){Sm.registerListener(mViewWithSensorListener,这是您注册和取消注册侦听器的方式吗?因为您设备的接近传感器的精度不会改变,所以没有必要为其覆盖onAccuracyChanged()。另一方面,onAccuracyChanged()经常用于位置传感器。我希望这会有帮助。嘿,gregS。thanx,感谢你花时间回答我。看,你给我的代码中的“事件”有一个错误。你能解释一下为什么会发生这种情况吗?嘿!我让它工作了。我意识到我的三星Galaxy Tab GT P1000没有接近传感器。我已经在手机上试用过了Galaxy mini和它的工作。Thanx为小费人。收到!