我有一个很好的类CustomSensorEventListener(见下文)
所有数据,如方位角,民意调查,投球,我得到的正确.
我在屏幕上有单个图像,根据传感器方向移动.
然而,传感器太敏感,我的意思是在任何纳米变化,我的图像略有移动.
像颤抖的东西.如何降低传感器级别,使其像Android上的相机一样.
如您所知,相机在任何传感器更换时都不会颤抖.
谢谢,
public class CustomSensorEventListener implements SensorEventListener {float[] inR = new float[16];float[] I = new float[16];float[] gravity = new float[3];float[] geomag = new float[3];float[] orIEntVals = new float[3];public static double azimuth = 0;public static double pitch = 0;static double roll = 0;private display mdisplay;public CustomSensorEventListener(display display){ mdisplay = display; }@OverrIDepublic voID onAccuracyChanged(Sensor sensor,int accuracy) { // Todo auto-generated method stub}@OverrIDepublic voID onSensorChanged(SensorEvent sensorEvent) { // If the sensor data is unreliable return if (sensorEvent.accuracy == SensorManager.SENSOR_STATUS_UNREliABLE) return; // Gets the value of the sensor that has been changed switch (sensorEvent.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: gravity = sensorEvent.values.clone(); break; case Sensor.TYPE_MAGNETIC_FIELD: geomag = sensorEvent.values.clone(); break; } // If gravity and geomag have values then find rotation matrix if (gravity != null && geomag != null) { // checks that the rotation matrix is found boolean success = SensorManager.getRotationMatrix(inR,I,gravity,geomag); float[] outR = new float[16]; if (success) { SensorManager.remapCoordinateSystem(inR,SensorManager.AXIS_Y,SensorManager.AXIS_MINUS_Z,outR);// display display = mContext.getwindowManager().getDefaultdisplay(); int deviceRot = mdisplay.getRotation(); switch (deviceRot) { // portrait - normal case Surface.ROTATION_0: SensorManager.remapCoordinateSystem(inR,SensorManager.AXIS_X,SensorManager.AXIS_Z,outR); break; // rotated left (landscape - keys to bottom) case Surface.ROTATION_90: SensorManager.remapCoordinateSystem(inR,SensorManager.AXIS_MINUS_X,outR); break; // upsIDe down case Surface.ROTATION_180: SensorManager.remapCoordinateSystem(inR,outR); break; // rotated right case Surface.ROTATION_270: SensorManager.remapCoordinateSystem(inR,outR); break; default: break; } SensorManager.getorIEntation(outR,orIEntVals); azimuth = Math.todegrees(orIEntVals[0]); pitch = Math.todegrees(orIEntVals[1]); roll = Math.todegrees(orIEntVals[2]); } //Log.v("MA","Az: "+azimuth+",Pi: "+pitch+",Ro: "+roll); }}};@H_301_28@解决方法 您可以使用低通滤波器来滤除抖动,振动和突然快速移动.滤波器允许较慢的移动,例如根据特定的截止频率改变旋转角度.
更多信息和实施细节:Low-Pass-Filter-To-Android-Sensors
Smoothing Sensor Data with a Low-Pass Filter
有关低通滤波器的更多信息(维基百科):Low-pass filter
总结以上是内存溢出为你收集整理的如何降低Android,java上的传感器敏感度?全部内容,希望文章能够帮你解决如何降低Android,java上的传感器敏感度?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)