Özel Değiştiriciler jetpack oluşturma | ProAndroidDev

Özel Değiştiriciler jetpack oluşturma |  ProAndroidDev

Not: bu makale üzerine inşa edilmiştir Bu makale bu yüzden işlerin nasıl çalıştığını anlamak için önce bu makaleyi kontrol etmenizi şiddetle tavsiye edeceğim.

içinde tartışıldığı gibi öncesi özel bir değiştirici oluşturmak için makalenin bir uygulamasını sağlamamız gerekiyor Modifier.Element arayüz. Var DrawModifier uzanan arayüz Modifier.Element böylece aynı zamanda uygulanmasını da kullanabiliriz DrawModifier.

Diyelim ki görmek istiyoruz Birleştirilebilir aşağıdaki resimdeki gibi bir çerçeve içinde

Bunu sizin için yapabilecek mevcut bir değiştirici yok.

peki bir şey yoksa ne yapacağız? (varlığa getirmek)

Şimdi buna özel değiştiricimizi oluşturalım addDecoration() ama önce nesne yönelimli gidelim ve genişletilebilir bir tasarım için can atalım.

Gelecekteki tüm Dekorasyonların kullanabileceği bir dekorasyon arayüzü oluşturuyorum.

Yukarıdaki çerçeve de dekorasyon görünüyor, hadi devam edelim ve bir uygulama oluşturalım. Dekorasyon biz onu diyoruz çerçeveler hangisi olacak sealed class takip etmemizi sağlayacak açık kapalı ilke sınıf patlaması olmadan ve çerçeve benzeri süslemelerin kapsüllenmesine yardımcı olacaktır.

bu DrawModifier arayüzün bir soyut yöntemi var fun ContentDrawScope.draw() çizim için uygulamamız gereken. Gördüğümüz gibi draw() üzerinde bir uzatma işlevidir ContentDrawScope Bu, kaynak kodu oluşturmada görülen yaygın bir kalıptır, nesneyi yöntem argümanı olarak iletmek yerine, bizi kullanarak üyeleri çağırmaktan kurtaran yöntemi uzatma işlevi olarak sağlarız. . çünkü bunlara doğrudan erişebiliriz.

A ContentDrawScope bize değiştiricinin uygulandığı birleştirilebilir boyutu ve aşağıdakiler gibi çeşitli çizim yöntemleri sağlar: drawLine() , drawRect(), drawPath() vb.

şimdi uygulamanızda kullanın DrawModifier aşağıdaki gibi

biz de arıyoruz drawContent() birleştirilebilirin orijinal çizimi için kullanılan yukarıdaki uygulamada, super.onDraw() özel bir görünüm uygulamasının ve buna benzer onDraw() sıra önemlidir çerçevenizi orijinal içerikten sonra çizin, aksi takdirde içerik kullanılarak çizildiğinden çerçeve arkasına gizlenir ressamın algoritması.

Şimdi bu şekilde bir çerçeve çiziyorsunuz, yukarıdaki koda koyun.

kullanım

Sonuç

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.