Geliştiriciler için Android jest öğretici (Android 10)

Yazar: John Stephens
Yaratılış Tarihi: 1 Ocak Ayı 2021
Güncelleme Tarihi: 6 Temmuz 2024
Anonim
Geliştiriciler için Android jest öğretici (Android 10) - Uygulamaların
Geliştiriciler için Android jest öğretici (Android 10) - Uygulamaların

İçerik


Kullanıma hazır Android standart UI bileşenleri bir dizi Android hareketini destekler, ancak bazen uygulamanızın sadece onClick'ten daha fazlasını desteklemesi gerekebilir.

Bu Android jest eğitiminde, bir dizi Android jestini uygulamak için ihtiyacınız olan her şeyi ele alacağız. Android'in bir hareketin “yaşam döngüsünü” nasıl kaydettiği ve tek parmakların çoklu dokunma etkileşimi içindeki hareketlerini nasıl izleyeceği de dahil olmak üzere, dokunma hareketlerinin temel kavramları hakkında bir fikir veren bir dizi basit uygulama yaratacağız.

Bazen uygulamanızın, yalnızca onClick'ten daha fazlasını desteklemesi gerekebilir.

Bu bilgilerin gerçek dünya projelerine nasıl dönüştüğünü göstermeye yardımcı olmak için, tutam hareketini kullanarak kullanıcının görüntüyü yakınlaştırıp uzaklaştırabilmesini sağlayan bir uygulama da oluşturacağız. Son olarak, Android 10'un Android'in jest desteğini tamamen elden geçirmeye hazır olması nedeniyle, uygulamanızın kendi hareketlerinin Android 10'larla çakışmamasını sağlamak da dahil olmak üzere Android'in yeni jest tabanlı navigasyonunu desteklemek için uygulamalarınızı nasıl güncelleyebileceğinizi inceleyeceğiz. sistem genelinde hareketler.


Ayrıca oku:Android Arayüzünüzü Oluşturma: Görünümler hakkında bilmeniz gereken her şey

Dokunma hareketleri nedir?

Dokunma hareketleri, kullanıcıların dokunmayı kullanarak uygulamanızla etkileşimde bulunmalarını sağlar.

Android, dokunma, çift dokunma, çimdikleme, kaydırma, kaydırma, uzun basma, sürükleme ve fırlatma gibi çeşitli dokunma hareketlerini destekler. Sürükleme ve sürükleme benzer olsa da, sürükleme, kullanıcı parmaklarını dokunmatik ekran üzerinde sürüklediğinde meydana gelen kaydırma türüdür; kullanıcı sürüklerken ve daha sonra parmağını hızlıca kaldırdığında bir hareket hareketi gerçekleşir.

Hareket navigasyonu Android 10'da büyük bir meseledir, bu yüzden kendimizi eklerken çatışmalara yol açmamak için dikkatli olmalıyız!


Android jestleri aşağıdaki kategorilere ayrılabilir:

  • Gezinme hareketleri. Bunlar, kullanıcının uygulamanızın etrafında hareket etmesine izin verir ve gezinme çekmeceleri ve menüler gibi diğer giriş yöntemlerini desteklemek için kullanılabilir.
  • Eylem hareketleri. Adından da anlaşılacağı gibi, eylem hareketleri kullanıcının bir işlemi tamamlamasını sağlar.
  • Hareketleri dönüştür. Bunlar, kullanıcının bir öğenin boyutunu, konumunu ve rotasyonunu değiştirmesine izin verir, örneğin bir görüntüyü veya haritayı yakınlaştırmak için sıkıştırma.

Android'de, tek parmaklara veya dokunma hareketi yapan diğer nesnelere işaretçileri.

MotionEvents: Hareket yaşam döngüsünü anlama

Kullanıcı cihazın dokunmatik ekranına bir veya daha fazla işaretçi yerleştirdiğinde bir dokunma olayı başlar ve bu işaretçileri ekrandan kaldırdığında biter. Bu Android jestleri başlar.

Bir veya daha fazla işaretçi ekranla temas halindeyken, MotionEvent nesneler, dokunma olayı hakkında bilgi toplar. Bu bilgiler, dokunma etkinliğinin X ve Y koordinatlarına göre hareketini ve temas alanının baskısını ve boyutunu içerir.

Bir MotionEvent ayrıca, dokunma etkinliğinin durumunu bir eylem kodu aracılığıyla açıklar. Android, uzun bir eylem kodları listesini destekler, ancak temel işlem kodlarından bazıları şunlardır:

  • ACTION_DOWN. Bir dokunma etkinliği başladı. İşaretçinin ekranla ilk temas ettiği konum budur.
  • ACTION_MOVE. Dokunma olayı sırasında bir değişiklik oldu (ACTION_DOWN ve ACTION_UP arasında). Bir ACTION_MOVE, işaretçinin en son AŞAĞI ya da MOVE olayından bu yana ara noktalarla birlikte en son X ve Y koordinatlarını içerir.
  • ACTION_UP. Dokunma etkinliği bitti. Bu, son sürüm konumunu içerir. Jestin iptal edilmediğini varsayarak, herşey dokunma etkinlikleri ACTION_UP ile biter.
  • ACTION_CANCEL. Jest iptal edildi ve Android bu etkinlik hakkında daha fazla bilgi almayacak. Bir ACTION_CANCEL'i, bir ACTION_UP olayıyla aynı şekilde işlemelisiniz.

MotionEvent nesneleri, hareket kodu ve eksen değerlerini, bu dokunma olayını alan Görünüm için onTouchBack () olay geri çağırma yöntemine iletir. Dokunma hareketinin düzenini yorumlamak ve buna göre tepki vermek için bu bilgileri kullanabilirsiniz. Her MotionEvent nesnesinin hakkında bilgi içereceğini unutmayın. herşey önceki MotionEvent öğesinden bu yana işaretçiler hareket etmemiş olsa bile, şu anda etkin olan işaretçiler.

Android tutarlı bir MotionEvents akışı sunmaya çalışsa da, bir etkinliğin başarılı bir şekilde teslim edilmeden önce bırakılması veya değiştirilmesi mümkündür. İyi bir kullanıcı deneyimi sağlamak için, uygulamanızın, örneğin “önceki” hareketi için bir ACTION_UP almadan bir ACTION_DOWN olayı alması durumunda tutarsız MotionEvents ile başa çıkabilmesi gerekir. Bu, Android jest eğitimimiz için önemli bir husustur.

Bir dokunma hareketinin “yaşam döngüsünü” göstermeye yardımcı olmak için, her MotionEvent nesnesinin işlem kodunu alan ve bu bilgiyi Android Studio’nun Logcat’ine basan bir uygulama oluşturalım.

Aşağıdaki kodda, her dokunma olayını onTouchEvent () yöntemini geçersiz kılarak ve ardından aşağıdaki değerleri kontrol ederek engelliyoruz:

  • Doğru. Uygulamamız bu dokunuş olayını ele aldı ve ilgili Logcat'e yazdıracağız.
  • Yanlış. Uygulamamız bu dokunma etkinliğini gerçekleştirmedi. Olay, onTouchEvent doğru dönene kadar yığında geçirilmeye devam edecektir.

OnTouchEvent () yöntemi, imlecin konumu, basıncı veya temas alanı değiştiğinde tetiklenir.

Aşağıdaki kodda, gerçekleştirilen eylemi almak için getActionMasked () kullanıyorum:

androidx.appcompat.app.AppCompatActivity dosyasını içe aktar; androidx.core.view.MotionEventCompat dosyasını içe aktarın; android.os.Bundle alma; android.util.Log dosyasını içe aktarın; android.view.MotionEvent dosyasını içe aktarın; genel sınıf MainActivity, AppCompatActivity'yi genişletir {private static final String TAG = "MyActivity"; @ Override korumalı geçersiz onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); } @Override public boolean onTouchEvent (MotionEvent olayı) {int myAction = MotionEventCompat.getActionMasked (olay); anahtar (myAction) {case (MotionEvent.ACTION_UP): Log.i (TAG, "İşlem yukarı"); gerçek dönüş; case (MotionEvent.ACTION_DOWN): Günlük.d (TAG, "Aşağı eylem"); gerçek dönüş; case (MotionEvent.ACTION_MOVE): Log.d (TAG, "Eylemi taşı"); gerçek dönüş; case (MotionEvent.ACTION_CANCEL): Günlük.d (TAG, "İşlem iptal"); gerçek dönüş; varsayılan: super.onTouchEvent (olay) döndürür; }}}

Bu uygulamayı fiziksel Android akıllı telefonunuza veya tabletinize yükleyin ve çeşitli dokunma hareketleri gerçekleştirerek deney yapın. Android Studio, dokunma jestinin kullanım ömrünün neresinde olduğunuza bağlı olarak Logcat'ten farklı baskılar almalıdır.

OnTouchListener: Belirli görünümler için dokunma olayları yakalama

Ayrıca View nesnesine bir View.OnTouchListener eklemek için setOnTouchListener () yöntemini kullanarak dokunma olaylarını dinleyebilirsiniz. SetOnTouchListener () yöntemi, bir dokunma olayı ekli Görünümüne her gönderildiğinde çağrılacak bir geri çağrıyı kaydeder; örneğin, kullanıcı bir ImageView'a her dokunduğunda bir geri çağrı başlatıyoruz:

ViewViewView = findViewById (R.id.my_imageView); myView.setOnTouchListener (yeni OnTouchListener () {genel boolean onTouch (Görüntüleme v, MotionEvent olayı)) {// Yapılacaklar: Etkinliğe dokunma yanıtı // return true;}});

View.OnTouchListener kullanıyorsanız, ACTION_DOWN olayı için false döndüren bir dinleyici oluşturmamanız gerektiğini unutmayın. ACTION_DOWN, tüm dokunma olayları için başlangıç ​​noktası olduğundan, yanlış bir değer, uygulamanızın ACTION_DOWN'ta sıkışmasına neden olur ve izleyici sonraki olaylar için çağrılmaz.

Dokunma eğimi: Hareket tabanlı hareketlerin kaydedilmesi

Dokunma hareketleri her zaman kesin değildir! Örneğin, yalnızca bir düğmeye dokunmaya çalışırken, özellikle hareket halindeyken akıllı telefonunuzu veya tabletinizi kullanıyorsanız veya el becerisi sorunlarınız varsa, parmağınızın hafifçe kayması kolaydır.

Yanlışlıkla kaydırmayı önlemeye yardımcı olmak için, Android hareketleri, bir işaretçinin dokunma gibi harekete dayalı olmayan bir hareketin harekete dayalı bir hareket haline gelmesinden önce hareket edebileceği uzaklık olan piksel cinsinden “dokunma eğimi” kavramını kullanır. Sürükleme olarak.

Dokunma eğimi, bir işaretçinin hareket tabanlı olmayan bir hareketten önce hareket edebileceği piksel cinsinden uzaklıktır

Hareket tabanlı hareketleri kullanırken, kullanıcının gerçekleşen herhangi bir ekran hareketini kontrol etmesini sağlamanız gerekir. Örneğin, kullanıcı ekranda bir nesneyi sürükliyorsa, bu nesnenin gittiği hız kullanıcının hareketinin hızıyla eşleşmelidir.

Android’in VelocityTracker sınıfını kullanarak hareket tabanlı bir hareketin hızını ölçebilirsiniz. Aşağıdaki Aktivitede, bir hareketin hızını almak için VelocityTracker kullanıyorum ve ardından hızı Android Studio’nun Logcat’ine yazdırıyorum:

android.app.Activity içeri aktar; android.util.Log dosyasını içe aktarın; android.view.MotionEvent dosyasını içe aktarın; android.view.VelocityTracker alma; genel sınıf MainActivity, Activity {genel statik final'i genişletiyor String TAG = "Velocity"; özel VelocityTracker myVelocityTracker; @ Genel boolean onTouchEvent (MotionEvent olayı) 'ı geçersiz kılın {buluşVelocityTracker (event); switch (event.getAction ()) {case MotionEvent.ACTION_UP: final VelocityTracker velocityTracker = myVelocityTracker; // İşaretçinin hızını belirle // velocityTracker.computeCurrentVelocity (1000); // Her işaretçinin hızını al // float xVelocity = myVelocityTracker.getXVelocity (); float yVelocity = myVelocityTracker.getYVelocity (); // Hızı saniyedeki piksel cinsinden girin // Log.i (TAG, "xVelocity:" + xVelocity + ", yVelocity:" + yVelocity); // Bir sonraki hareketi kaydetmeye hazır olan hız izleyiciyi başlangıç ​​durumuna sıfırla // myVelocityTracker.clear (); break; varsayılan: mola; } doğru dönüş; } private void edininVelocityTracker (MotionEvent olayı) {if (myVelocityTracker == null) {// Yeni bir VelocityTracker nesnesini al // myVelocityTracker = VelocityTracker.obtain (); } myVelocityTracker.addMovement (event); }}

Bu uygulamayı Android cihazınıza yükleyin ve farklı hareket tabanlı hareketler yaparak deney yapın; Her hareketin hızı Logcat penceresine basılmalıdır.

GestureDetector: Android hareketleriyle bir yakınlaştırma uygulaması oluşturma

Dokunma ve uzun basma gibi genel Android hareketlerini kullandığınızı varsayarak, bireysel dokunma olaylarını işlemeye gerek kalmadan hareketleri algılamak için Android'in GestureDetector sınıfını kullanabilirsiniz.

Bir hareketi algılamak için, bir GestureDetector örneği oluşturmanız ve ardından View # onTouchEvent (MotionEvent) yönteminde onTouchEvent (android.view.MotionEvent) öğesini çağırmanız gerekir. Ardından bu dokunma olayının nasıl geri çağrılacağını tanımlayabilirsiniz.

Ayrıca oku: Android'i Keşfetmek S: Uygulamanıza kabarcık bildirimleri ekleme

Hareketleri kullanarak, kullanıcının bir ImageView’u yakınlaştırıp uzaklaştırabileceği bir uygulama oluşturalım. Başlamak için, görüntü içeren basit bir düzen oluşturun:

Yakınlaştırma / uzaklaştırma efekti oluşturmak için, ölçeklendirme olaylarının bir alt kümesini ve ayrıca SimpleOnScaleGestureListener yardımcı sınıfını dinleyebilen bir uygunluk sınıfı olan ScaleGestureDetector kullanıyorum.

Aşağıdaki Aktivitede ImageView'im için ScaleGestureDetector örneği oluşturuyorum ve sonra View # onTouchEvent (Motionvent) yönteminde onTouchEvent (android.view.MotionEvent) öğesini çağıracağım. Son olarak, uygulamanın bu hareketi nasıl ele alması gerektiğini tanımlıyorum.

android.os.Bundle alma; android.view.MotionEvent dosyasını içe aktarın; android.widget.ImageView içeri aktar; android.view.ScaleGestureDetector dosyasını içe aktarın; android.graphics.Matrix dosyasını içe aktarın; androidx.appcompat.app.AppCompatActivity dosyasını içe aktar; genel sınıf MainActivity, AppCompatActivity süresini uzatır {private Matrix imageMatrix = new Matrix (); özel ImageView imageView; özel şamandıra ölçeği = 2f; özel ScaleGestureDetector jestDetector; @ Override korumalı geçersiz onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); imageView = (ImageView) findViewById (R.id.imageView); // Hareket algılayıcısını başlatınız // jestDetector = new ScaleGestureDetector (MainActivity.this, new imageListener ()); } @Override public boolean onTouchEvent (MotionEvent olayı) {// motionDetector'ın tüm olayları incelemesine izin verin // motionDetector.onTouchEvent (event); gerçek dönüş; } // Ölçek dinleyicisini uygulayın // private class imageListener, ScaleGestureDetector.SimpleOnScaleGestureListener öğesini genişletiyor. = detector.getScaleFactor (); // Resmimiz için maksimum ve minimum boyut belirleyin // scale = Math.max (0.2f, Math.min (scale, 6.0f)); imageMatrix.setScale (ölçek, ölçek); imageView.setImageMatrix (imageMatrix); gerçek dönüş; }}}

Bu uygulamayı fiziksel bir Android akıllı telefona veya tablete yüklemeyi deneyin; sıkıştırma ve sıkıştırma hareketlerini kullanarak seçtiğiniz görüntüyü küçültüp büyütebileceksiniz.

Çoklu dokunma hareketlerini yönetme

Bazı hareketler, sıkıştırma hareketi gibi birden çok işaretçi kullanmanızı gerektirir. Birden çok işaretçi ekranla temas kurduğunda, Android şunları üretir:

  • Ekrana dokunan ilk işaretçi için bir ACTION_DOWN olayı.
  • Takip eden herkes için bir ACTION_POINTER_DOWN, birincil olmayan işaretçiler Bu ekran ile temas kurar.
  • Birincil olmayan bir işaretçi ekrandan kaldırıldığında bir ACTION_POINTER_UP.
  • Son işaretçi ekranla temas ettiğinde ACTION_UP olayı.

Örneğin, bir sonraki Aktivitede bir hareketin tek dokunuşla mı yoksa çoklu dokunuşla mı olduğunu tespit edip ardından Android Studio’nun Logcat’ına uygun bir baskı alıyorum. Ayrıca, Android'in her bir işaretçiyi nasıl izleyeceği konusunda daha fazla bilgi sağlamak için her bir etkinlik için işlem kodunu ve X ve Y, her işaretçinin koordinatlarını da yazdırıyorum:

android.app.Activity içeri aktar; android.util.Log dosyasını içe aktarın; android.view.MotionEvent dosyasını içe aktarın; androidx.core.view.MotionEventCompat dosyasını içe aktarın; genel sınıf MainActivity, Activity {public static final dizisini genişletiyor String TAG = "SingleorMulti"; @ Genel boolean'ı geçersiz kıl onTouchEvent (MotionEvent olayı) {int action = MotionEventCompat.getActionMasked (event); String actionCode = ""; anahtar (eylem) {vaka MotionEvent.ACTION_DOWN: actionCode = "Aşağı"; break; case MotionEvent.ACTION_POINTER_DOWN: actionCode = "İşaretçi Aşağı"; break; case MotionEvent.ACTION_MOVE: actionCode = "Move"; break; case MotionEvent.ACTION_UP: actionCode = "Up"; break; case MotionEvent.ACTION_POINTER_UP: actionCode = "İşaretçi Yukarı"; break; case MotionEvent.ACTION_OUTSIDE: actionCode = "Dış"; break; case MotionEvent.ACTION_CANCEL: actionCode = "İptal"; break; } Log.i (TAG, "İşlem:" + işlemKodu); int index = MotionEventCompat.getActionIndex (event); int xPos = -1; int yPos = -1; if (event.getPointerCount ()> 1) {Log.i (TAG, "Çoklu Dokunma olayı"); } else {Log.i (ETİKET, "Tek Dokunuş olayı"); gerçek dönüş; } xPos = (int) MotionEventCompat.getX (olay, dizin); yPos = (int) MotionEventCompat.getY (olay, dizin); Log.i (TAG, "xPosition:" + xPos + ", yPosition:" + yPos); gerçek dönüş; }}

ViewGroups'ta hareketleri yönetme

Bir ViewGroup'taki dokunma olaylarını ele alırken, ViewGroup'un ana ViewGroup'tan farklı dokunma olayları için hedefleri olan çocukları olabilir.

Her alt Görünüm'ün doğru dokunma olaylarını almasını sağlamak için, onInterceptTouchEvent () yöntemini geçersiz kılmanız gerekir. Bu yöntem, bir ViewGroup yüzeyinde bir dokunma olayı algılandığında çağrılır, böylece bir dokunma etkinliğini alt Görünümlere gönderilmeden önce arayabilmenizi sağlar.

Ayrıca şunu da oku:

OnInterceptTouchEvent () yöntemi true olarak döndürülürse, daha önce dokunmatik olayı işleyen alt Görünüm bir ACTION_CANCEL alır ve bunun yerine ebeveynin onTouchEvent () yöntemine gönderilir.

Örneğin, aşağıdaki snippet'te, bir kaydırma etkinliğinin olup olmadığına bağlı olarak bir dokunma etkinliğinin engellenip engellenmeyeceğine karar veriyoruz:

@ Genel boolean'ı geçersiz kılındı ​​onInterceptTouchEvent (MotionEvent ev) {final int eylem = MotionEventCompat.getActionMasked (ev); if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {mIsScrolling = false; // Dokunma olayını engellemeyin // return false; } switch (eylem) {case MotionEvent.ACTION_MOVE: {if (mIsScrolling) {// Dokunma olayını durdurma // return; }} ... ... ... ... false döndürür; } @Override public boolean onTouchEvent (MotionEvent ev) {// Yapılacaklar: Dokunma olayını işleyin //}}

Bu uygulamayı Android cihazınızda çalıştırın ve Logcat çıktısı şunun gibi görünmelidir:

Uygulamanızı kolay bir hedef haline getirin: Dokunmatik alanları genişletme

Görünümün dokunulabilir bölgesinin boyutunu genişleterek, bazen isabetli dikdörtgen olarak da adlandırılan, daha küçük UI öğelerinin etkileşimini daha kolay hale getirebilirsiniz. Alternatif olarak, kullanıcı Arabiriminiz birden çok etkileşimli kullanıcı Arabirimi öğesi içeriyorsa, kullanıcıların "yanlış" Görünümü tetiklemelerini önlemek için dokunmatik hedeflerini daraltabilirsiniz.

TouchDelegate sınıfını kullanarak alt görünümün dokunulabilir alanının boyutunu düzeltebilirsiniz.

Bir düğme oluşturalım ve sonra bu düğmenin dokunulabilir bölgesini nasıl genişlettiğimizi görelim.

Görünüm’ün dokunulabilir bölgesini değiştirmek için aşağıdaki adımları tamamlamamız gerekir:

1. Ana Görünümü Alın ve UI iş parçacığında bir Runnable gönderin

GetHitRect () yöntemini çağırmadan ve çocuğun dokunulabilir alanını almadan önce, ebeveynin çocuğunu belirttiğinden emin olmamız gerekir.

parentView.post (new Runnable () {@Override public void run () {Rect delegateArea = new Rect ();

2. Çocuğun dokunulabilir alanının sınırlarını alın

GetHitRect () yöntemini kullanarak düğmenin geçerli dokunabilir hedefini alabiliriz:

Rect delegateArea = new Rect (); Düğme myButton = (Düğme) findViewById (R.id.button); ... ... ... myButton.getHitRect (temsilciArea);

3. Dokunmatik alanın sınırlarını uzatın

Burada, düğmenin alt ve sağ tarafındaki dokunmatik hedefini artırıyoruz:

delegeArea.right + = 400; delegeArea.bottom + = 400;

4. Bir TouchDelegate Örnekleme

Son olarak, genişletilmiş dokunulabilir hedefi Android’in TouchDelegate sınıfının bir örneğine aktarmamız gerekiyor:

TouchDelegate touchDelegate = yeni TouchDelegate (temsilciArea, myButton); if (View.class.isInstance (myButton.getParent ())) {((Görünüm) myButton.getParent ()). setTouchDelegate (touchDelegate);

İşte tamamladığımız MainActivity:

androidx.appcompat.app.AppCompatActivity dosyasını içe aktar; android.os.Bundle alma; android.widget.Button öğesini içe aktarın; android.view.TouchDelegate alma; android.view.View içeri aktar; android.widget.Toast dosyasını içe aktarın; android.graphics.Rect'i içe aktarın; genel sınıf MainActivity, AppCompatActivity'yi genişletiyor {@Override korumalı void onCreate (BundI savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); ParentView = findViewById (R.id.button); parentView.post (new Runnable () {@Override public void run () {Relege delegateArea = new Rect (); Button myButton = (Button) findViewById (R.id.button); myButton.setEnabled (true); myButton.setOnClickListener (yeni View.OnClickListener () {@Onride genel boşluğu geçersiz kıl (Görünüm görünümü) {Toast.makeText (MainActivity.this, "Button clicked", Toast.LENGTH_SHORT) .show ();}}); myButton.getHitRect (delegateArea) ; delegateArea.right + = 400; delegateArea.bottom + = 400; TouchDelegate touchDelegate = yeni TouchDelegate (delegateArea, myButton); eğer (View.class.isInstance (myButton.getParent ())) {((Görünüm) )). setTouchDelegate (touchDelegate);}}}); }}

Bu projeyi Android cihazınıza yükleyin ve dokunmayı deneyin etrafında düğmenin sağ ve altı - dokunulabilir alanı önemli miktarda genişlettiğimizden, herhangi bir yere dokunduğunuzda tost görünmelidir yakın düğme.

Android 10’un yeni gezinme modeli: Hareket tabanlı gezinme

API seviyesi 29'dan başlayarak, Android tam hareket tabanlı navigasyonu destekler.

Android'in en son ve en iyi sürümündeki kullanıcılar, yalnızca hareketleri kullanarak aşağıdaki eylemleri tetikleyebilecek:

  • Geri. Ekranın sol veya sağ kenarından içeri doğru kaydırın.
  • Ev. Ekranın altından yukarı kaydırın.
  • Başlatma Yardımcısı. Ekranın alt köşesinden içeri doğru kaydırın.

Android 10, geleneksel 3 düğmeli gezinmeyi desteklemeye devam edecek, böylece kullanıcılar, isterlerse, düğmeye dayalı gezinmeye geri dönme seçeneğine sahip olacaklar.

Google’a göre, jest tabanlı gezinme Android 10 ve üstü için varsayılan olacaktır, bu nedenle uygulamanızın Android'in yeni jest tabanlı modeliyle iyi bir kullanıcı deneyimi sağladığından emin olmanız gerekir.

Kullanıcı arayüzünüzü kenardan kenara taşıyın

Hareket tabanlı gezinme, uygulamanız için ekranın daha fazla kullanılmasını sağlar, böylece uygulamanızın içeriğini uçtan uca genişleterek daha sürükleyici bir deneyim sunabilirsiniz.

Varsayılan olarak, uygulamalar durum çubuğunun altına ve gezinme çubuğunun üstüne yerleştirilir (topluca sistem çubukları olarak adlandırılır). Kenardan kenara bir ekranda, uygulamanız düzenlenir arkasında özel uygulamanız için mantıklıysa, gezinti çubuğunu ve isteğe bağlı olarak sistem çubuğunun arkasını kullanın.

Sisteme, View.setSystemUiVisibility () yöntemini ve SYSTEM_UI_FLAG_LAYOUT_STABLE ve SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION bayraklarını kullanarak uygulamanızı sistem çubuğunun arkasına yerleştirmesini söyleyebilirsiniz. Örneğin:

view.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

CoordinatorLayout gibi durum çubuğunu otomatik olarak yöneten bir View sınıfı kullanıyorsanız, bu bayrakların önceden ayarlanmış olabileceğini unutmayın.

Sistem çubuğunu saydam çevirme

Uygulamanız uçtan uca görüntülendiğinde, kullanıcının uygulamanızın içeriğini sistem çubuklarının arkasında görmesini sağlamanız gerekir.

Sistem çubuklarını tamamen saydam yapmak için temanıza aşağıdakileri ekleyin:

Android 10, dinamik renk uyarlaması olarak bilinen bir işlemle, sistem çubuğunun rengini otomatik olarak arkasındaki içeriğe göre değiştirir, bu nedenle bu ayarları el ile yapmak için endişelenmenize gerek yoktur.

Çakışan hareketleri kontrol et

Android’in yeni jest tabanlı navigasyon sisteminin uygulamanızın mevcut hareketleriyle çakışmadığını test etmeniz gerekir.

Özellikle, Geri hareketinin (ekranın sol veya sağ kenarından içeri doğru kaydırarak) uygulamanızın etkileşimli öğelerinin hiçbirini tetiklemediğini kontrol etmelisiniz. Örneğin, uygulamanız ekranın sol tarafında bir gezinme çekmecesi içeriyorsa, kullanıcı bu çekmeceyi her açışında sürüklemeye çalıştığında, Android'in Geri hareketini tetikler ve uygulamanızdan çıkabilirsiniz.

Test, jest çatışmalarını ortaya çıkarırsa, uygulamanızdaki sistemin dokunma olaylarını Geri hareketleri olarak yorumlamaması gereken alanların bir listesini sağlayabilirsiniz.

Bu listesini sağlamak için dışlama hileleri, bir Listeyi Android’in yeni View.setSystemGestureExclusionRects () yöntemine iletin, örneğin:

ExclusionRect'leri listele; public void onLayout (boolean changeCanvas, int sol, int üst, int sağ, int alt) {setSystemGestureExclusionRects (exclusionRects); } public void onDraw (Tuval tuval) {setSystemGestureExclusionRects (exclusionRects); }

Geniş bölgeler veya Düğmeler gibi basit dokunma hedefleri için değil, yalnızca küçük bir alanda hassas hareket gerektiren Görünümler için Geri hareketini devre dışı bırakmanız gerektiğini unutmayın.

Peki ya Android 10’un Ana sayfa hareketi?

Yazma sırasında, Android 10’un Ana hareketinden vazgeçmek mümkün değildir (ekranın altından yukarı kaydırarak). Ana sayfa hareketi ile ilgili sorunlarla karşılaşıyorsanız, olası bir geçici çözüm, WindowInsets.getMandatorySystemGestureInsets () öğesini kullanarak dokunma tanıma eşiklerini ayarlamaktır.

Oyun uygulamaları için jest tabanlı gezinme

Mobil oyunlar gibi bazı uygulamalar, Görünüm hiyerarşisine sahip değildir, ancak yine de, kullanıcının Android'in jest tabanlı navigasyon sistemini tetikleyen alanlarda hareketler gerçekleştirmesini gerektirebilir.

Oyun uygulamanızda jest çakışması yaşıyorsanız, sistemin dokunma olaylarını Geri hareketleri olarak yorumlamaması gereken alanların bir listesini sağlamak için Window.setSystemGestureExclusionRects () yöntemini kullanın.

Alternatif olarak, uygulamanızın tüm sistem hareketlerini devre dışı bırakan sürükleyici modda yapılmasını isteyebilirsiniz.

SetSystemUiVisibility () öğesini çağırarak ve ardından aşağıdaki bayrakları geçirerek sürükleyici modu etkinleştirebilirsiniz:

  • SYSTEM_UI_FLAG_FULLSCREEN. Kritik olmayan tüm sistem öğeleri gizlenerek uygulamanızın içeriğinin tüm ekranı kaplamasını sağlar.
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION. Sistem navigasyonunu geçici olarak gizleyin.
  • SYSTEM_UI_FLAG_IMMERSIVE. Durum çubuğu gizlendiğinde bu Görünüm etkileşimli kalmalıdır. Bu bayrağın herhangi bir etkisi olması için SYSTEM_UI_FLAG_HIDE_NAVIGATION ile birlikte kullanılması gerektiğini unutmayın.

Sürükleyici modda, kullanıcı ekranın altından kaydırarak herhangi bir noktada sistem hareketlerini yeniden etkinleştirebilir.

En iyi uygulamalar: Hareketleri etkili kullanma

Şimdi, çeşitli dokunma hareketlerinin nasıl uygulanacağını ve uygulamanızı Android'in yeni hareket tabanlı navigasyon sistemi için uygulamanıza hazır hale getirmek için atabileceğiniz adımları gördük, hareketleri etkili bir şekilde kullandığınızdan emin olmak için en iyi uygulamalara bir göz atalım.

Kullanıcılarınızın tahminlerini bırakmayın: Etkileşimli bileşenleri vurgulayın

Standart Görünümler kullanıyorsanız, kullanıcılarınızın çoğu zaman uygulamanızın etkileşimli bileşenlerini otomatik olarak tanımlayabilmeli ve onlarla nasıl etkileşime geçebileceğini anlamalıdır. Örneğin, bir kullanıcı bir düğme görürse, o zaman o düğmeye basması beklendiğini hemen anlar. Ancak, zaman zaman belirli bir Görünümün etkileşimli olduğu açık olmayabilir ve bu durumlarda onlara bazı ek görsel ipuçları sağlamanız gerekebilir.

Uygulamanızın etkileşimli Görünümlerine dikkat çekmenin birkaç yolu vardır. İlk olarak, darbe efekti gibi kısa bir animasyon ekleyebilir veya Görüntüyü yükseltebilir, örneğin kullanıcının genişletmek için ekranda sürükleyebileceği bir kartı kaldırabilirsiniz.

Alternatif olarak, daha açık olabilir ve kullanıcının bir sonraki ile etkileşime girmesi gereken Görünümü belirten bir ok gibi simgeleri kullanabilirsiniz.

Daha karmaşık etkileşimler için, kullanıcının Görünümle nasıl etkileşime girmesi gerektiğini gösteren kısa bir animasyon tasarlayabilirsiniz, örneğin bir kartı ekrana kısmen kaydırıp tekrar ekrana kaydırmak için.

Dönüştürücü hareketler için animasyonlar kullanın

Bir kullanıcı dönüştürücü bir hareket gerçekleştirirken, etkilenen tüm UI öğelerinin, bu hareket tamamlandığında ne olacağını belirten bir şekilde canlandırması gerekir. Örneğin, kullanıcı bir görüntüyü küçültmek için çimdikleniyorsa, hareket tamamlandığında kullanıcının yeni boyuta “takılmak” yerine, bu hareketi gerçekleştirirken görüntünün boyutunun küçültmesi gerekir.

Devam eden eylemler için görsel ipuçları sağlama

Eylemleri gerçekleştiren hareketler için, bu hareketin tamamlandığında gerçekleştireceği eylemi iletmelisiniz. Örneğin, Gmail uygulamasında bir e-postayı sürüklemeye başladığınızda, sürükleme işlemine devam ederseniz bu e-postanın arşivleneceğini belirten bir Arşiv simgesi ortaya çıkar.

Tamamlanan eylemi belirterek süre kullanıcı eylem hareketini gerçekleştiriyor, sonuç bekledikleri gibi değilse, onlara hareketi iptal etme fırsatı veriyorsunuz.

Bu Android jest eğitimini tamamlama

Bu makalede, Android uygulamalarınızda çeşitli hareketlerin nasıl uygulanacağını ve hareketin hızı ve birden fazla işaretçi olup olmadığı gibi devam eden hareketler hakkında nasıl bilgi alacağınızı gösterdim. Ayrıca Android 10’un yeni jest tabanlı navigasyon sistemini ve uygulamanızın, kullanıcıların Android cihazlarıyla nasıl etkileşimde bulundukları konusundaki bu revizyona hazır olmasını sağlamak için atmanız gereken adımları açıkladık.

Uygulamanızda Android hareketlerini kullanmak için artık en iyi uygulamalarınız var mı? Aşağıdaki yorumlarda bize bildirin!

Bir akıllı telefonu adece ona bakarak adlandırabilir miin? Eğer öyleye, bu ınav izin için bir parça kek olmalıdır. Her oru, her biri imiyle birlikte bir telefonu göteren dört ...

Bu ınav, kelimenin en büyük akıllı telefon üreticilerinden biri hakkında ne kadar bilginiz olduğunu tet edecek. Huawei’nin tarihi, yaklaşan ürünler, gelecek için planlar ...

Sizin Için Makaleler