java - 根据与每个轴android的对齐方式更改颜色
问题描述
我有一个功能,根据手机与每个轴(X、Y、Z)的对齐方式,背景颜色会发生变化。例如,如果它与 X 对齐,则背景为绿色。我正在使用两个传感器(加速度计和磁场)来获取旋转角度俯仰、滚动和方位角,但我不了解这些值或如何正确执行。我正在考虑手机是否与轴对齐,如果它从手机的顶部穿过中间穿过手机的底部,基本上,如果轴以手机为中心(不确定是否清晰)。感谢您提供的任何帮助。
orientationEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_MAGNETIC_FIELD:
mags = event.values.clone();
break;
case Sensor.TYPE_ACCELEROMETER:
accels = event.values.clone();
break;
}
if (mags != null && accels != null) {
gravity = new float[9];
magnetic = new float[9];
SensorManager.getRotationMatrix(gravity, magnetic, accels, mags);
float[] outGravity = new float[9];
SensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X,SensorManager.AXIS_Z, outGravity);
SensorManager.getOrientation(outGravity, values);
azimuth = values[0] * 57.2957795f;
pitch =values[1] * 57.2957795f;
roll = values[2] * 57.2957795f;
mags = null;
accels = null;
}
Fragment fragment = (CanvasFragment) getSupportFragmentManager().findFragmentById(R.id.canvasFragment);
//getSupportActionBar().setTitle("Azimuth: " + azimuth + ", Pitch: " + pitch + ", Roll: " + roll);
//Aligned with Y?
if (((-90 > azimuth && azimuth > -70) || (90 > azimuth && azimuth > 70)) && ((180 < roll && roll < 160) || (-180 < roll && roll < -160))
&& ((90 < pitch && pitch < 80) || (-90 < pitch && pitch < -80))) {
fragment.getView().setBackgroundColor(Color.RED);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
解决方案
推荐阅读
- sql - 查找 Spark Dataframe 中列的最大两个下一个值的平均值
- c# - 从多个数据库表中检索数据到 ASP.NET Core 中的 API
- azure - 使用 sftp-ssh 通过逻辑应用将 1Gb 文件上传到 Azure 文件共享
- python - 根据搜索词从谷歌驱动器文件夹中检索文件
- python - 我收到 TypeError: expected string or bytes-like object "
- bash - -bash: 'export: command not found -bash: 400:: command not found 都出现在mac终端上
- javascript - 当 DOM 完成绘制新元素时发出警报的最简单方法是什么?
- postgresql - PostgreSQL 数据仓库:在同一个数据库中创建单独的数据库或不同的表?
- javascript - 慢慢滚动到页面底部?
- python - 使用 Flask-SQLAlchemy 时事务连接空闲