Merhaba arkadaşlar, bu yazımda Xamarin Forms ile Haptic Feedback verilir bundan bahsedeceğiz. Öncelikle Haptic Feedback nedir bundan bahsedelim. iOS kullanıcılarının aslında uygulama kullanırken sürekli olarak hissetiği bir titreşimdir. Örnek vermek gerekirse App Store üzerinden bir uygulama satın aldığınızda başarılı veya başarısız olma durumuna göre titreşim hissedersiniz. Bu olay bi yerden sonra ekranı görmeseniz bile, sonucunun başarılı veya başarısız olduğunu anlayabilirsiniz. Gayet hoş bir his oluşturur elinizde. Android kullanıcıları açısında benim şu ana kadar karşılaşmadığım bir durumdur. İnternette biraz araştırdığım zaman butonlara sanırım verebiliyor bu özelliği verebiliyormuşuz. Bunun yerine telefonu kendimiz de titretebiliriz ama bu çok da hoş olmuyor.
Öncelikle bunun için Dependency Service yazmamız gerekiyor. Dependency Service hakkında daha fazla bildi almak istiyorsanız buradan ulaşabilirsiniz.
ilk olarak telefonumuzda hangi seviyede bir feedback vereceğimizi seçtirmemiz lazım. Bunun için bir enum oluşturuyorum. Burada 5 adet seviyede var. Biz bunlardan herhangi bir seviyede olan seçebiliriz.
public enum HapticEnums { Soft, Light, Medium, Rigid, Heavy }
Sonrasında ise bir interface oluşturmamız gerekli. Bu interface içerisinde çalıştıracağımız fonksiyonu yazmamız gerekiyor. Burada feedback’in hangi seviyede olacağınıda söylememiz gerekiyor. Ben default olarak medium seviyesini çalıştırmasını istediğim için varsayılan değeri Medium seviyesine getiriyorum.
public interface IHapticFeedback { void Run(HapticEnums haptic = HapticEnums.Medium); }
Ardından bu Interface’i Android ve iOS’de kullanmam gerekiyor. İlk olarak iOS katmanında HapticFeedback adında bir sınıf oluşturup, portable katmanında oluşturduğumuz interface den kalıtım almasını sağlıyorum. Sonrasında bu Interface’den gelen fonksiyonu yazmam gerekli. Hangi seviyede geri bildirim sağlayacaksam sağlayıp çalıştırıyorum.
[assembly:Xamarin.Forms.Dependency(typeof(HapticFeedback))] namespace ProjectName.iOS.DependencyServices { public class HapticFeedback : IHapticFeedback { public void Run(HapticEnums style = HapticEnums.Medium) { UIImpactFeedbackGenerator haptic; switch (style) { case HapticEnums.Heavy: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Heavy); break; case HapticEnums.Light: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Light); break; case HapticEnums.Medium: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Medium); break; case HapticEnums.Rigid: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Rigid); break; case HapticEnums.Soft: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Soft); break; default: haptic = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Medium); break; } haptic.ImpactOccurred(); } } }
iOS katmanını yazdıktan sonra Android katmanını yazmamız gerekiyor. Ben Android için Haptic Feedback kullanmıyorum ama siz belki kullanırsınız diye telefonu titretme olayını burada da yazacağım. Burada siz kendiniz istediğiniz seviye ayarlayabilirsiniz. Ben default olarak 50 milisaniye verdim.
public void Run(HapticEnums haptic = HapticEnums.Medium) { Vibrator vibrator = (Vibrator)Android.App.Application.Context.GetSystemService(Android.App.Application.VibratorService); switch (haptic) { case HapticEnums.Soft: vibrator.Vibrate(50); break; case HapticEnums.Rigid: vibrator.Vibrate(50); break; case HapticEnums.Medium: vibrator.Vibrate(50); break; case HapticEnums.Light: vibrator.Vibrate(50); break; case HapticEnums.Heavy: vibrator.Vibrate(50); break; default: vibrator.Vibrate(50); break; } } }
Artık geriye sadece bu yazdığımız kodları Dependecy Service ile çalıştırmamız gerekecek. Bir butona tıkladığımızda veya listeden bir item seçtiğimizde veya herhangi bir aksiyonda Dependecy Service ile kullanabilirsiniz.
internal void RunHaptic(HapticEnums hapticEnums = HapticEnums.Medium) { DependencyService.Get<IHapticFeedback>().Run(hapticEnums); }
Sorularınız olursa mail veya yorum atarak ulaşabilirsiniz. İyi çalışmalar.
Comments (2)
Joe Celinesays:
Pazar Mayıs 7th, 2023 at 04:16Hi,
Are you still in business?
I found a few errors on your site.
Would you like me to send over a screenshot of those errors?
Regards
Joe
(714) 908-9255
omersezersays:
Pazar Temmuz 30th, 2023 at 17:14Hi,
Yes currently i am working with Xamarin. If you send your problem we can solve together.