Ich sehe, dass Xamarin hat Dokumente für Creating a Gesture Listener aber nichts über "Schütteln" das Gerät nur "schleudern" auf dem Bildschirm. Ich frage mich, ob Xamarin für Android auf Shake-Gesten hören kann? Weiß jemand oder hat jemand versucht? Vielen Dank im Voraus.Kann Xamarin Shake Accelerometer auf Android handhaben?
Antwort
Hier ist ein vollständiges Beispiel, das Android.Hardware.ISensorEventListener
verwendet, um eine Shake-Geste zu erkennen. Sie sollten dies problemlos in Ihre eigenen Projekte einfügen können.
[Activity (Label = "ShakeDetection", MainLauncher = true)]
public class MainActivity : Activity, Android.Hardware.ISensorEventListener
{
bool hasUpdated = false;
DateTime lastUpdate;
float last_x = 0.0f;
float last_y = 0.0f;
float last_z = 0.0f;
const int ShakeDetectionTimeLapse = 250;
const double ShakeThreshold = 800;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
// Register this as a listener with the underlying service.
var sensorManager = GetSystemService (SensorService) as Android.Hardware.SensorManager;
var sensor = sensorManager.GetDefaultSensor (Android.Hardware.SensorType.Accelerometer);
sensorManager.RegisterListener(this, sensor, Android.Hardware.SensorDelay.Game);
}
#region Android.Hardware.ISensorEventListener implementation
public void OnAccuracyChanged (Android.Hardware.Sensor sensor, Android.Hardware.SensorStatus accuracy)
{
}
public void OnSensorChanged (Android.Hardware.SensorEvent e)
{
if (e.Sensor.Type == Android.Hardware.SensorType.Accelerometer)
{
float x = e.Values[0];
float y = e.Values[1];
float z = e.Values[2];
DateTime curTime = System.DateTime.Now;
if (hasUpdated == false)
{
hasUpdated = true;
lastUpdate = curTime;
last_x = x;
last_y = y;
last_z = z;
}
else
{
if ((curTime - lastUpdate).TotalMilliseconds > ShakeDetectionTimeLapse) {
float diffTime = (float)(curTime - lastUpdate).TotalMilliseconds;
lastUpdate = curTime;
float total = x + y + z - last_x - last_y - last_z;
float speed = Math.Abs(total)/diffTime * 10000;
if (speed > ShakeThreshold) {
Toast.MakeText(this, "shake detected w/ speed: " + speed, ToastLength.Short).Show();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
}
#endregion
}
Die obige Aktivität implementiert die Android.Hardware.ISensorEventListener
Schnittstelle und registriert sie dann durch die SensorManager
. Die tatsächlichen Sensorereignisse (Schütteln usw.) werden an OnSensorChanged
weitergeleitet; Hier haben wir die Logik für unseren Shake-Erkennungscode.
Ich habe diese Antwort auf this one basiert, aber habe ein paar Änderungen daran gemacht. Erstens verwendet diese Antwort ISensorEventListener statt ISensorListener (die in API-Ebene 3 veraltet war). Und Sie werden feststellen, Start-Gestenerkennung enthalten (über hasUpdated
) und einige Variablen, um die Empfindlichkeit der Shake zu steuern. Indem Sie mit ShakeDetectionTimeLapse
und ShakeDetectionThreshold
herumspielen, sollten Sie in der Lage sein, es auf Ihre Bedürfnisse abzustimmen.
See:
- 1. android accelerometer registerListener
- 2. Android Accelerometer für Gaming
- 3. Android Buttonbild Shake Animation
- 4. Android - Shake-Erkennung
- 5. erkennen Shake in Android
- 6. Android Shake Event
- 7. Kann keine Dateien auf Android mit Xamarin
- 8. Accelerometer-Codierung funktioniert nicht in allen Telefonen
- 9. Android: Shake Detector zu empfindlich
- 10. android accelerometer Genauigkeit ist extrem schlecht
- 11. Android SMS empfangen und handhaben
- 12. Datei kann nicht auf das Gerät auf Xamarin android
- 13. Shake Icons in Android als iPhone auf Long Press
- 14. Android-Anwendung auf Xamarin portieren?
- 15. Xamarin: Wie Debuggen Xamarin Android auf Visual Studio
- 16. UICollectionViewCell Shake
- 17. Mit Accelerometer umsehen - Unity3D C#
- 18. iPhone Accelerometer Kalibrierung
- 19. Kann kein Projekt in Xamarin Android erstellen
- 20. Kann kein Android-Projekt in Xamarin
- 21. Zugriff auf den ServiceManager mit Xamarin Android
- 22. Amazon SQS (Android) handhaben intermittierende Netzwerkkonnektivität
- 23. Kann System.Reflection.TypeExtensions auf Xamarin nicht laden
- 24. ADXL345 Accelerometer Datenausgabe Konvertierung
- 25. CoreMotion Bump vs Shake auf iPhone
- 26. OnBackPressed in Xamarin Android
- 27. TextView (Xamarin Android)
- 28. Ein Shake-Ereignis implementieren
- 29. Circular ImageView auf Xamarin
- 30. Erkennung der Bewegungsrichtung des Geräts mit ACCELEROMETER in Android
Ich werde diesen einen Versuch geben und Sie wissen lassen. ich danke dir sehr :) –