Şimdiye kadar ki örneklerimizde sayfalar arasındaki geçişlerimizde Android'in bize sağladığı varsayılan geçiş olanaklarını kullandık. Şimdi gelin özelleştirelim..
Bu dersimizde özelleştirilmiş bir geçiş animasyonunun nasıl kullanılacağını öğreneceğiz. Yukarıda da sözünü ettiğimiz gibi şimdiye kadar ki örneklerimizde sayfalar arasındaki geçişlerimizde Android'in bize sağladığı varsayılan geçiş olanaklarını kullandık. O da düz ve animasyon içermeyen bir geçiş sitemiydi.
Bu örneğimiz için aşağıdaki ekranı kullanacağım. BlankFragment içerisindeki FRAGMENT 4'E GİT butonuna basıldığında BlankFragment4'e gidecek ve gittiği sayfadan geri dönüldüğünde animasyonlu bir geçiş yapmasını sağlayacağım.
Bunun için res klasörünün altında anim klasörü oluşturarak aşağıdaki 4 dosyayı buraya ekliyorum.
Şimdi BlankFragment.kt içerisine geçip aşağıdaki düzenlemeleri yapıyorum.
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_blank, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val options = navOptions {
anim {
enter = R.anim.slide_in_right
exit = R.anim.slide_out_left
popEnter = R.anim.slide_in_left
popExit = R.anim.slide_out_right
}
}
btn.setOnClickListener {
val action = BlankFragmentDirections.actionBlankFragmentToBlankFragment4(etName.text.toString())
findNavController().navigate(action, options)
}
}
}
Burada iki yeni kod şeklim var. Birincisi findNavController'a ait navigate metoduna yeni bir parametre geçiyorum, navOptions. İkincisi de findNavController'a parametre olarak verilecek navOptions'ı kullanarak gerekli parametreleri taşıyacak options değişkenimi oluşturmak. Tüm yapmam gereken yalnızca bu kadar! Uygulamamızı çalıştırıp test edebilirsiniz.
Yukarıdaki anlatım şeklimiz navOptions'ı kullanmanın kod haliydi. İsterseniz aynı işlemi XML dosyası üzerinden de gerçekleştirebilirisiniz.
Öncelikle nav_graph.xml'i açalım ve aşağıdaki gibi BlankFragment'ten BlankFragment4'e giden action'ı düzenleyelim.
Yeri gelmişken belirtelim. Vermiş olduğumuz parametreler de şu anlama geliyor.
enterAnim: Bir hedefe giriş
exitAnim: Bir varış yerinden çıkma
popEnterAnim: Bir pop eylemi ile bir hedefe giriş
popExitAnim: Bir pop eylemi ile varış yerinden çıkma
Dikkat edeceğiniz gibi biraz önce kod üzerinden yaptığımız animasyon atamalarını XML üzerinde yapmış olduk. Buna göre de BlankActivity.kt dosyasını aşağıdaki gibi düzenleyebiliriz.
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_blank, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
btn.setOnClickListener {
val action = BlankFragmentDirections.actionBlankFragmentToBlankFragment4(etName.text.toString())
findNavController().navigate(action)
}
}
}