Измените или уменьшите скорость автоматического скольжения Viewpager2, чтобы сделать прокрутку плавной - PullRequest
0 голосов
/ 19 июня 2020

Я хочу показать некоторые элементы в Viewpger2, которые будут автоматически сдвигаться через некоторое время. В моем случае это 5 se c. Я реализую эту штуку с помощью Viewpager2 и Rx java. Все в порядке. Он отлично скользит. Но проблема, с которой я столкнулся, заключается в том, что автоматическое скольжение происходит так быстро, как грохот. Кажется, что-то работает так быстро, UX кажется довольно плохим.

Есть ли какое-нибудь решение для уменьшения или изменения скорости скольжения Viewpager2, чтобы улучшить UX fr.

Вот мой код

my_fragment.xml

<androidx.viewpager2.widget.ViewPager2
        android:id="@+id/testimonial_view_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/_15sdp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

MyFragment.kt

override fun initWidget() {
        val compositePagerTransformer = CompositePageTransformer()
        with(compositePagerTransformer) {
            addTransformer(MarginPageTransformer(15))
            addTransformer { page, position ->
                val r = 1 - abs(position)
                page.scaleY = ((0.85f + r * 0.15).toFloat())
            }
        }

        with(testimonial_view_pager) {
            clipToPadding = false
            clipChildren = false
            offscreenPageLimit = 3
            getChildAt(0).overScrollMode = OVER_SCROLL_NEVER

            adapter = myAdapter
            setPageTransformer(compositePagerTransformer)
        }

}

override fun observeLiveData() {
        this.observe(viewModel.items) {
            testimonialAdapter.submitList(it)
            startAutoSliding()
        }
}

private fun startAutoSliding() {
        compositeDisposable += Observable.interval(5000, MILLISECONDS)
            .observeOn(mainThread())
            .subscribe {
                if (testimonial_view_pager.currentItem < testimonialAdapter.itemCount - 1) {
                    testimonial_view_pager.currentItem = testimonial_view_pager.currentItem + 1
                } else {
                    testimonial_view_pager.currentItem = 0
                }
            }
}
...