ViewPager: setPageTransformer неправильный просмотр перевода - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь внедрить вступление для приложения, в котором есть пейджер с 3 страницами и пользовательская анимация, используя: setPageTransformer

Виды на центрированной странице не идут с анимацией - в концепроведите пальцем с первой на вторую страницу и верните на исходное место, что приведет к неправильной анимации со второй на третью страницу

Вот мой код:

 pager.setPageTransformer(true) { view, position ->

        var mPosition = position

        val pageWidth = view.width
        val pageHeight = view.height
        val ratio = pageWidth.toFloat() / pageHeight


        if (position in 0.0..1.0) {

            bubble_intro_imageView.setTranslationY(-(pageWidth * (1 - mPosition) / 3 * ratio))
            notification_intro_textView.setTranslationX(pageWidth * (1 - mPosition) / 8 * ratio)
            bubble_intro_textView.setTranslationY(pageWidth * (1 - mPosition) / 3 * ratio)

        } else if (position in -1.0..-0.0) {

            var negativePosition = -position

            bubble_intro_imageView.setTranslationY(-(pageWidth * (1 - negativePosition) / 3 * ratio))
            notification_intro_textView.setTranslationX((pageWidth * (1 - negativePosition) / 8 * ratio))
            bubble_intro_textView.setTranslationY((pageWidth * (1 - negativePosition) / 3 * ratio))

        }
    }

Я использую "androidx"для фрагмента, Adapter и Viewpager:

Мой адаптер:

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import java.util.ArrayList

class IntroPageAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(
    fragmentManager,
    BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {

    var fragments = ArrayList<Fragment>()

    fun addFrag(fragment: Fragment) {
        fragments.add(fragment)
    }

    override fun getItem(position: Int): Fragment {
        return fragments[position]
    }

    override fun getCount(): Int {
        return fragments.size
    }
}

Есть что-то, что я пропустил?

1 Ответ

0 голосов
/ 09 июня 2019

После нескольких часов поиска проблемы.Я нашел решение, которое немного странно. Проблема была в KTX-расширение

, как только я удалил его использование и изменил его на "findViewById". Это работало так хорошо, без прерывания ванимация

Я не знаю объяснения

Мой код:

 pager.setPageTransformer(true) { view, position ->

            var mPosition = position

            val pageWidth = view.width
            val pageHeight = view.height
            val ratio = pageWidth.toFloat() / pageHeight


            notificationImageView = view.findViewById<View>(R.id.notification_intro_imageView) as ImageView?
            bubbleImageView = view.findViewById<View>(R.id.bubble_intro_imageView) as ImageView?
            bubbleTextView = view.findViewById<View>(R.id.bubble_intro_textView) as TextView?


            if (position in 0.0..1.0) {

                if (notificationImageView != null && bubbleImageView != null && bubbleTextView != null) {


                    notificationImageView!!.setTranslationY(-(pageWidth * (1 - mPosition) / 3 * ratio))
                    bubbleImageView!!.setTranslationX(pageWidth * (1 - mPosition) / 8 * ratio)
                    bubbleTextView!!.setTranslationY(pageWidth * (1 - mPosition) / 3 * ratio)

                }

            } else if (position in -1.0..-0.0) {

                if (notificationImageView != null && bubbleImageView != null && bubbleTextView != null) {


                    var negativePosition = -position
                    notificationImageView!!.setTranslationY(-(pageWidth * (1 - negativePosition) / 3 * ratio))
                    bubbleImageView!!.setTranslationX((pageWidth * (1 - negativePosition) / 8 * ratio))
                    bubbleTextView!!.setTranslationY((pageWidth * (1 - negativePosition) / 3 * ratio))

                }

            }
        }

Кто-нибудь знает объяснение?

...