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

}

希望问题很清楚。

4

1 回答 1

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);
于 2013-04-22T17:31:36.227 回答