Temel kavramlar

Aşağıdaki bölümlerde, sürükle ve bırak işlemiyle ilgili birkaç temel kavram açıklanmaktadır.

Sürükleme ve bırakma işlemi

Sürükleyip bırakma işleminde dört adım veya durum vardır: başladı, ve sona erdiğini görebilirsiniz.

Başladı

Kullanıcının sürükleme hareketine karşılık olarak uygulamanız Sisteme bir sürükleme ve bırakma işlemi başlatmasını söylemek için startDragAndDrop(). İlgili içeriği oluşturmak için kullanılan yönteminin bağımsız değişkenleri şunları sağlar:

  • Sürüklenecek veriler.
  • Sürükleme gölgesini çizmek için geri çağırma
  • Sürüklenen verileri açıklayan meta veriler
  • Sistem, sürükleme almak için uygulamanızı geri arayarak yanıt verir. gölge. Ardından sistem, cihazda sürükleme gölgesini görüntüler.
  • Ardından sistem, işlem türü içeren bir sürükleme etkinliği gönderir Sürükleme etkinliğine ACTION_DRAG_STARTED geçerli düzendeki View nesnenin tümünün işleyicisi. Alıcı: olası bir bırakma işlemi de dahil olmak üzere, sürükleme etkinlikleri almaya devam eder etkinlik—sürükleme etkinliği işleyicisi true değerini döndürmelidir. Bu şekilde dinleyiciyle iletişim kurmaktır. Yalnızca kayıtlı dinleyiciler şunu yapmaya devam eder: sürükleme etkinliklerini alır. Bu noktada dinleyiciler, görünümün kapatılabileceğini göstermek için View nesnesinin görünümünü etkinlik kabul edersiniz.
  • Sürükleme etkinliği işleyici false döndürürse sürükleme almaz sistem bir sürükleme etkinliği gönderene kadar, geçerli işlemle ilgili etkinlikler ACTION_DRAG_ENDED işlem türüne sahip. false değerini döndürerek dinleyici, sisteme bu konuyla ilgilenmediğini bildirir olduğunu ve sürüklenen verileri kabul etmesini istemiyordur.
Devam ediyor
Kullanıcı sürüklemeye devam eder. Sürükleme gölgesi sınırlayıcı kutusunu işaretlerseniz sistem, hedefe bir veya daha fazla sürükleme etkinliği gönderir hedefin sürükleme etkinliği işleyicisi. Dinleyici, toplantının görünümünü Etkinliğe yanıt olarak View azalma hedefini. Örneğin, sürükleme gölgesinin, düşüşün sınırlayıcı kutusuna girdiğini gösterir target - işlem türü ACTION_DRAG_ENTERED — dinleyici, View işaretini vurgulayarak tepki verebilir.
Atıldı
Kullanıcı, düşüşün sınırlayıcı kutusunda sürükleme gölgesini serbest bırakır hedefi belirleyebilirsiniz. Sistem, bırakma hedefi işleyicisine işlem içeren bir sürükleme etkinliği gönderir ACTION_DROP yazın. Sürükleme etkinliği nesnesi, işlemi başlatan startDragAndDrop() çağrısı. Dinleyici işleyici başarılı olursa sisteme true boole döndürmesi beklenir bırakılan verileri işler. : Bu adım yalnızca kullanıcı, işleyicisi sürükleme etkinliklerini almak üzere kayıtlı olan bir View için sınırlayıcı kutu (düşüş hedefi). Kullanıcı diğer ACTION_DROP sürükleme etkinliği gönderilmez.
Sona erdi

Kullanıcı sürükleme gölgesini serbest bıraktıktan sonra ve sistem,

gerekirse sistem ACTION_DROP işlem türünde bir sürükleme etkinliği şunu belirtmek için ACTION_DRAG_ENDED işlem türünde bir sürükleme etkinliği gönderir: sürükle ve bırak işlemi sona erdi. Bu, kullanıcının sürükleme gölgesini serbest bırakır. Etkinlik, seçilen dinleyicilere dinleyici de ACTION_DROP etkinliği.

Bu adımların her biri, Sürükleme ve bırakma işlemi.

Etkinlikleri sürükleme

Sistem, DragEvent nesnesi biçiminde bir sürükleme etkinliği gönderir. sürükle ve bırak işlemiyle ne olduğunu açıklayan bir işlem türü içeriyor bahsedeceğim. İşlem türüne bağlı olarak, nesne başka veriler de içerebilir.

Sürükleme etkinliği işleyicileri DragEvent nesnesini alır. İşlem türünü öğrenmek için dinleyici araması DragEvent.getAction(). DragEvent sınıfında sabitlerle tanımlanan altı olası değer vardır. dönüşüm hunisinin orta kısmına yönelik bir dizi

Tablo 1. DragEvent işlem türleri

İşlem türü Anlamı
ACTION_DRAG_STARTED Uygulama, startDragAndDrop() numarasını çağırır ve sürükleme gölgesi. İşleyici, sürükleme etkinliklerini almaya devam etmek isterse bu işlem için true boole değerini bahsedeceğim.
ACTION_DRAG_ENTERED Sürükleme gölgesi, sürükleme etkinliği işleyicisinin View Bu, işleyicinin kullandığı ilk etkinlik işlemi türüdür. alan sürükleme gölgesi sınırlayıcı kutuya girdiğinde alır.
ACTION_DRAG_LOCATION Bu ACTION_DRAG_ENTERED etkinliği, sürükleme gölgesi hâlâ sürükleme etkinliği işleyicisinin sınırlayıcı kutusunun içinde View.
ACTION_DRAG_EXITED Bir ACTION_DRAG_ENTERED ve en az bir tane takip ediliyor ACTION_DRAG_LOCATION etkinliği, sürükleme gölgesi hareket eder sürükleme etkinliği işleyicisinin sınırlayıcı kutusunun dışında View.
ACTION_DROP Sürükleme etkinliği işleyicinin üzerine sürükleme gölgesi serbest kalır View Bu işlem türü bir View cihazına gönderilir nesnenin işleyicisi yalnızca işleyici boole döndürürse true şuna yanıt olarak: ACTION_DRAG_STARTED sürükleme etkinliği. Bu işlem türü kullanıcı bir View üzerinde sürükleme gölgesi serbest bırakırsa gönderilir işleyicisi kayıtlı değilse veya kullanıcı sürüklemeyi serbest bırakırsa gölgelendirir.

İşleyici, boole true değerini döndürürse başarılı bir şekilde işliyor. Aksi takdirde, false

ACTION_DRAG_ENDED Sistem, sürükle ve bırak işlemini sonlandırıyor. Bu işlem türü öncesinde bir ACTION_DROP etkinliği olması gerekmez. Eğer sistem bir ACTION_DROP gönderir ve ACTION_DRAG_ENDED işlem türü, bırakma işlemi başarılı. Dinleyici aramalıdır getResult(), tablo 2'de gösterildiği gibi şuna yanıt olarak döndü: ACTION_DROP. Bir ACTION_DROP etkinlik gönderilemedi, ardından getResult(), false değerini döndürür.

DragEvent nesnesi, uygulamanızın anahtar/değer çiftini startDragAndDrop() çağrısında sisteme iletir. Verilerin bir kısmı Tablo 2'de özetlendiği üzere, yalnızca belirli işlem türleri için geçerlidir. Daha fazla hakkında daha fazla bilgi için A başlıklı bölüme bakın. sürükle ve bırak işlemi hakkında bilgi edinin.

Tablo 2. İşlem türüne göre geçerli DragEvent verileri

getAction()
değer
getClipDescription()
değer
getLocalState()
değer
getX()
değer
getY()
değer
getClipData()
değer
getResult()
değer
ACTION_DRAG_STARTED ✓ ✓        
ACTION_DRAG_ENTERED ✓ ✓        
ACTION_DRAG_LOCATION ✓ ✓ ✓ ✓    
ACTION_DRAG_EXITED ✓ ✓        
ACTION_DROP ✓ ✓ ✓ ✓ ✓  
ACTION_DRAG_ENDED   ✓       ✓

DragEvent yöntemleri: getAction(), describeContents(), writeToParcel(), ve toString() her zaman geçerli veriler döndürür.

Bir yöntem belirli bir işlem türü için geçerli veriler içermiyorsa Sonuç türüne bağlı olarak null veya 0.

Sürükleme gölgesi

Sürükleyip bırakma işlemi sırasında sistem, kullanıcının kullanır. Veri hareketi için bu resim, sürüklenen verileri temsil eder. Örneğin, diğer işlemlerde, resim sürükleme işleminin bir yönünü temsil eder.

Resme sürükleme gölgesi adı verilir. Bu dosyayı, belirttiğiniz yöntemlerle oluşturursunuz CANNOT TRANSLATE View.DragShadowBuilder nesnesini tanımlayın. Sürükleyip bırakma işlemini başlattığınızda oluşturucuyu sisteme geçirirsiniz işlemi startDragAndDrop() kullanarak gerçekleştirebilirsiniz. Verdiğimiz yanıtın bir parçası olarak startDragAndDrop() ise sistem şurada tanımladığınız geri çağırma yöntemlerini çağırır: sürükleme gölgesi elde etmek için View.DragShadowBuilder tuşuna basın.

View.DragShadowBuilder sınıfının iki kurucusu var:

View.DragShadowBuilder(View)

Bu oluşturucu, uygulamanızın View nesne algılandı. Yapıcı, View.DragShadowBuilder nesnesindeki View nesnesidir. Bu nedenle geri çağırma, gölgeyi oluşturmak için bu dosyaya erişebilir. Görünümün bir Kullanıcının sürükleme işlemini başlatmak için seçtiği View.

Bu oluşturucuyu kullanıyorsanız View.DragShadowBuilder veya yöntemlerini geçersiz kılın. Varsayılan olarak bağımsız değişken olarak ilettiğiniz View ile aynı görünüme sahip bir gölge kullanıcının ekrana dokunduğu konumun altında ortalanır.

View.DragShadowBuilder()

Bu oluşturucuyu kullanırsanızView View.DragShadowBuilder nesne algılandı. Alan null olarak ayarlanmış. Süreyi uzatmanız gerekiyor View.DragShadowBuilder ve yöntemlerini geçersiz kılın. Aksi takdirde görünmez sürükleme gölgesi. Sistem hata vermez.

View.DragShadowBuilder sınıfı, birlikte sürüklemeyi oluşturan iki yöntem içeriyor gölge:

onProvideShadowMetrics()

Sistem, startDragAndDrop() çağrısından hemen sonra bu yöntemi çağırır. Sürükleme gölgesinin boyutlarını ve dokunma noktasını sisteme bakacağız. Yöntemde iki parametre bulunur:

outShadowSize: Point nesnesini tanımlayın. Sürükleme gölgesi genişliği artar x ve yüksekliği şu şekilde girilir: y.

outShadowTouchPoint: Point nesnesi. Temas noktası, konumun içinde, sürükleme sırasında kullanıcının parmağının altında olması gerekir. X konumu x içinde, Y konumu ise y içinde yer alıyor.

onDrawShadow()

Sistem, onProvideShadowMetrics() çağrısından hemen sonra Sürükleme gölgesini oluşturmak için onDrawShadow() tuşlarına basın. Yöntemde tek bir bağımsız değişkeni olan Canvas nesnesi sistem, Schema.org'da sağladığınız parametrelerden onProvideShadowMetrics(). Yöntem, verilen sürükle gölgeyi çizerek Canvas

Performansı artırmak için sürükleme gölgesinin boyutunu küçük tutun. Tek bir bir simge kullanmak isteyebilirsiniz. Çok öğeli bir seçim için ekrana yayılmış tam resimler yerine, simgeleri bir grupta kullanmak istiyorsanız.

Etkinlik işleyicileri ve geri çağırma yöntemlerini sürükleme

Bir View, şunu uygulayan bir sürükleme etkinliği işleyici ile sürükleme etkinlikleri alır: View.OnDragListener veya görünümün onDragEvent() geri çağırma yöntemiyle. Zaman sistem, yöntemi veya dinleyiciyi çağırır. DragEvent bağımsız değişkeni.

Çoğu durumda, geri çağırma yöntemi yerine bir işleyicinin kullanılması tercih edilir. Zaman kullanıcı arayüzleri tasarlarsanız genellikle View sınıflarının alt sınıfına girmezsiniz, ancak geri çağırma yöntemi, yöntemi geçersiz kılmak için sizi alt sınıflar oluşturmaya zorlar. İçinde bir işleyici sınıfı uygulayabilir ve ardından bunu birden çok işleyici ile kullanabilirsiniz. farklı View nesneleri görebilirsiniz. Bunu anonim bir satır içi sınıf olarak da uygulayabilirsiniz veya lambda ifadesinden başka bir ifade içermez. Bir View nesnesinin işleyicisini ayarlamak için şu çağrıyı yapın: setOnDragListener().

Alternatif olarak, onDragEvent() varsayılan uygulamasını değiştirebilirsiniz yöntemini de kullanabilirsiniz. Ayarlayın: OnReceiveContentListener görüntüleme; Ayrıntılı bilgi için bkz. setOnReceiveContentListener(). Bu işlemin ardından onDragEvent() yöntemi varsayılan olarak aşağıdakileri yapar:

  • startDragAndDrop() çağrısına yanıt olarak true değerini döndürür.
  • Aramalar performReceiveContent() sürükleyip bırakma verilerini görünüm içine bırakın. Veriler yöntemini ContentInfo nesnesi olarak tanımlar. İlgili içeriği oluşturmak için kullanılan yöntemi OnReceiveContentListener yöntemini çağırır.

  • Sürükle ve bırak verileri görünüme bırakılırsa true (doğru) değerini döndürür. OnReceiveContentListener, tüm içerikleri tüketir.

Verileri özellikle sizin için işlemek üzere OnReceiveContentListener tanımlayın uygulamasını indirin. API düzeyi 24'e kadar geriye dönük uyumluluk için OnReceiveContentListener.

View nesnesi için sürükleme etkinliği işleyici ve geri çağırma yönteminiz olabilir Bu durumda sistem önce dinleyiciyi çağırır. Sistem, işleyici false değerini döndürmediği sürece geri çağırma yöntemini kullanır.

onDragEvent() yöntemi ile View.OnDragListener kombinasyonu aşağıdaki kombinasyonun onTouchEvent() ve View.OnTouchListener Dokunma etkinlikleri ile kullanılır.