接近传感器可更改按钮颜色

时间:2013-04-22 15:13:04

标签: android

我正在尝试制作一个应用程序,按钮的颜色随着接近传感器而变化。

我不知道如何在onSensorChanged部分更改它。我必须导入Color并实现不同的颜色状态吗?我有点困惑。

这是我的代码:

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"));
}

}

希望问题很明确。

1 个答案:

答案 0 :(得分:2)

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

请记住在onStart()代码中向接近传感器注册一个监听器,如下所示:

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

同样在onStop()代码中取消注册接近传感器的监听器,如下所示:

mSensorManager.unregisterListener(mViewWithSensorListener);