Tôi thấy rằng Xamarin có tài liệu cho Creating a Gesture Listener nhưng không có gì về việc 'lắc' thiết bị chỉ 'trượt' trên màn hình. Tôi tự hỏi liệu Xamarin cho Android có thể lắng nghe cử chỉ lắc không? Có ai biết hoặc có ai thử không? Cảm ơn bạn trước.Xamarin có thể xử lý gia tốc rung trên Android không?
Trả lời
Dưới đây là ví dụ hoàn chỉnh sử dụng Android.Hardware.ISensorEventListener
để phát hiện cử chỉ lắc. Bạn sẽ có thể để thả này vào dự án của riêng bạn (s) mà không có bất kỳ rắc rối.
[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
}
Các hoạt động nêu trên thực hiện các giao diện Android.Hardware.ISensorEventListener
và sau đó đăng ký nó thông qua SensorManager
. Các sự kiện cảm biến thực tế (lắc vv) được dẫn vào OnSensorChanged
; đây là nơi chúng tôi giữ logic cho mã phát hiện rung của chúng tôi.
Tôi đã dựa trên câu trả lời này trên this one nhưng đã thực hiện một vài sửa đổi đối với nó. Thứ nhất, câu trả lời này sử dụng ISensorEventListener thay vì ISensorListener (không được dùng ở cấp API 3). Và bạn sẽ tìm thấy phát hiện cử chỉ bắt đầu bao gồm (thông qua hasUpdated
) và một số biến để kiểm soát độ nhạy của lắc. Bằng cách chơi xung quanh với ShakeDetectionTimeLapse
và ShakeDetectionThreshold
bạn sẽ có thể tinh chỉnh nó theo nhu cầu của mình.
Xem:
- 1. Xamarin httpwebrequest trên Android, Không thể truy cập đối tượng được xử lý
- 2. Lọc gia tốc Android?
- 3. Tốc độ Android dựa trên các giá trị gia tốc
- 4. Các hình thức Xamarin PCL HttpClient ném ngoại lệ không được xử lý trên Android
- 5. Xử lý hình ảnh OpenGL trên Android - không có SurfaceView
- 6. Xử lý các URL cụ thể với bộ lọc chủ định trong Xamarin Mono cho Android
- 7. Có thể chạy Xamarin Mono trên Linux không?
- 8. Bạn có thể tăng cường độ rung trên thiết bị Android không?
- 9. chuyển jQuery-mobile rung trên Android
- 10. Android Rung trên bánh mì nướng (Homer: Mmmm rung trên bánh mì nướng)
- 11. Đấu tranh để hiểu Xamarin xử lý ngoại lệ
- 12. Android: phương pháp rung (nếu điện thoại không có bộ rung?)
- 13. Xử lý hình ảnh trên Android
- 14. Xử lý nội dung gzipped trên Android
- 15. android - phát hiện rung
- 16. Xử lý ngoại lệ toàn cầu Xamarin | Droid | iOS
- 17. Android Rung khi chạm?
- 18. Android - Thiết bị rung không hoạt động
- 19. lý do tại sao có một ứng dụng Xamarin Android trống khoảng 10mb không gian?
- 20. Tôi có thể kiểm tra hiệu ứng gia tốc trong trình mô phỏng Xcode không?
- 21. Android: Thông báo.DEFAULT_VIBRATE có yêu cầu quyền rung không?
- 22. Xử lý hình ảnh trên Android - tôi có thể sử dụng thư viện nào?
- 23. Android, xử lý SQLiteConstraintException
- 24. Giá trị tối đa của gia tốc Android
- 25. Trình xử lý ngắt có thể được xử lý bởi cùng một trình xử lý ngắt không?
- 26. ANDROID - dx xử lý quá chậm
- 27. Vải TwitterKit trên Xamarin
- 28. Android - trình xử lý chính có thể gây ra rò rỉ bộ nhớ không?
- 29. Không thể để chạy dự án Xamarin Android
- 30. Xử lý khóa Android (Framework)
tôi sẽ cung cấp cho một thử này & cho bạn biết. cảm ơn bạn rất nhiều :) –