所以,我已经在我的 Android Compass 中修复了这个错误 2 天了。基本上我正在尝试使用 Xamarin.Android 构建 Qibla Compass。第一步应该是建立一个指向北方的指南针。
我已经翻译了 本教程中的 JAVA 代码,以便我的 Compass 显示正确的 North 。
I am simply rotating my Relative Layout which contains my Compass Image whenever Sensor reading Changes.
我试过凭直觉调整代码,但这个简单的指南针不喜欢呆在一个地方。我只是想保持我的指南针图像的北方与磁北对齐。
然而,我的指南针从未显示正确的北方,北方也在不断变化。
为了检查我的设备 Compass 确实有效,我从 Playstore 测试了一个应用程序,它运行得非常流畅。
我的活动:
public class QiblaDirectionActivity : Activity, ISensorEventListener
//all the right inherits done
我的设计代码片段:
<RelativeLayout
android:layout_width="wrap_content"
android:id="@+id/qiblaRL"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/qiblaCompass"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:layout_centerInParent="true"
android:src="@drawable/compass" />
<ImageView
android:id="@+id/qiblaArrow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:layout_centerInParent="true"
android:src="@drawable/needle" />
</RelativeLayout>
我的后端:
float currentCompassDegree = 0f;
public void OnSensorChanged(SensorEvent e)
{
//I have checked the accuracy its high
RotateAnimation ra = new RotateAnimation(currentCompassDegree,-e.Values[0], Dimension.RelativeToSelf, 0.5f, Dimension.RelativeToSelf, 0.5f);
ra.Duration = 120;
ra.FillAfter = true;
qiblaRL.StartAnimation(ra);
currentCompassDegree = -e.Values[0];
}
我在这里注册我的听众:
protected override void OnResume()
{
base.OnResume();
if (_sensorManager != null)
{
var mF = _sensorManager.GetDefaultSensor(SensorType.MagneticField);
_sensorManager.RegisterListener(this, mF, SensorDelay.Ui);
qiblaAdvice.Text= "(Align Device Properly)";
}
else
{
qiblaAdvice.Text = "(Device doesn't support Compass)";
}
}
我在这里取消注册:
protected override void OnPause()
{
base.OnPause();
if (_sensorManager != null)
{
_sensorManager.UnregisterListener(this);
}
}