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üzendekiView
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şleyicisitrue
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çinView
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 etkinliklerACTION_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şlatanstartDragAndDrop()
çağrısı. Dinleyici işleyici başarılı olursa sistemetrue
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 birView
için sınırlayıcı kutu (düşüş hedefi). Kullanıcı diğerACTION_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çinACTION_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 deACTION_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
İş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 |
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.
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
nesnesindekiView
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ğiView
.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ğinizView
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ız
View
View.DragShadowBuilder
nesne algılandı. Alannull
olarak ayarlanmış. Süreyi uzatmanız gerekiyorView.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 artarx
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 konumux
içinde, Y konumu isey
içinde yer alıyor.onDrawShadow()
Sistem,
onProvideShadowMetrics()
çağrısından hemen sonra Sürükleme gölgesini oluşturmak içinonDrawShadow()
tuşlarına basın. Yöntemde tek bir bağımsız değişkeni olanCanvas
nesnesi sistem, Schema.org'da sağladığınız parametrelerdenonProvideShadowMetrics()
. Yöntem, verilen sürükle gölgeyi çizerekCanvas
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önteminiContentInfo
nesnesi olarak tanımlar. İlgili içeriği oluşturmak için kullanılan yöntemiOnReceiveContentListener
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.