简体   繁体   中英

How to implement Interfaces from CompositePageTransformer class

I just started studying Kotlin and tried to follow an example about CompositePageTransformer and ViewPager2 but in example use JAVA. I am so confused about it. The problem is I can't override fun transformPage on ViewPager2.PageTransformer

My Kotlin Code

val compositePageTransformer = CompositePageTransformer()
    compositePageTransformer.addTransformer(ViewPager2.PageTransformer {
         override fun transformPage(page: View,position: Float) {
                        val r = 1 - abs(position)
                        page.scaleY = 0.95f + r *  0.05f
                  }
    })

ViewPager2.java

public interface PageTransformer {
        void transformPage(@NonNull View page, float position);
    }

First of all, Java requires that all public classes/interfaces were placed into the same-named files. So, public interface PageTransformer should be placed into PageTransformer.java file (or had another visibility modifier).

Secondly, you call it from Kotlin in the wrong way. Correct syntax should be:

compositePageTransformer.addTransformer(object : PageTransformer {
    override fun transformPage(page: View, position: Float) {
        val r = 1 - abs(position)
        page.scaleY = 0.95f + r *  0.05f
    }
})

If you mark your interface with @FunctionalInterface and use Kotlin 1.4, then it could be even more concise:

compositePageTransformer.addTransformer(PageTransformer { page, position ->
    val r = 1 - abs(position)
    page.scaleY = 0.95f + r *  0.05f
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM