hackware1993 / MagicIndicator

A powerful, customizable and extensible ViewPager indicator framework. As the best alternative of ViewPagerIndicator, TabLayout and PagerSlidingTabStrip —— 强大、可定制、易扩展的 ViewPager 指示器框架。是ViewPagerIndicator、TabLayout、PagerSlidingTabStrip的最佳替代品。支持角标,更支持在非ViewPager场景下使用(使用hide()、show()切换Fragment或使用setVisibility切换FrameLayout里的View等),http://www.jianshu.com/p/f3022211821c
9.68k stars 1.54k forks source link

不支持ViewPager2 #255

Open PopFisher opened 3 years ago

PopFisher commented 3 years ago

项目中使用的ViewPager2,可以支持么

kartyjoin commented 3 years ago
fun bind(magicIndicator: MagicIndicator, viewPager: ViewPager2) {
    viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            magicIndicator.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)
            magicIndicator.onPageScrollStateChanged(state)
        }
    })
}
1181631922 commented 3 years ago
fun bind(magicIndicator: MagicIndicator, viewPager: ViewPager2) {
    viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            magicIndicator.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)
            magicIndicator.onPageScrollStateChanged(state)
        }
    })
}

指示器会有抖动问题

kartyjoin commented 3 years ago
fun bind(magicIndicator: MagicIndicator, viewPager: ViewPager2) {
    viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            magicIndicator.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)
            magicIndicator.onPageScrollStateChanged(state)
        }
    })
}

指示器会有抖动问题

使用中没遇到过,要不打印一下第一个方法vp传过来的后两个参数?是不是vp有什么问题 vp2本身也是用recyclerview实现的,是不是有什么对他的改动?

1181631922 commented 3 years ago
fun bind(magicIndicator: MagicIndicator, viewPager: ViewPager2) {
    viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            magicIndicator.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)
            magicIndicator.onPageScrollStateChanged(state)
        }
    })
}

指示器会有抖动问题

使用中没遇到过,要不打印一下第一个方法vp传过来的后两个参数?是不是vp有什么问题 vp2本身也是用recyclerview实现的,是不是有什么对他的改动?

跟踪了一下偏移量,是系统的问题,最后的变化是非线性的

kartyjoin commented 3 years ago
fun bind(magicIndicator: MagicIndicator, viewPager: ViewPager2) {
    viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
        }

        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            magicIndicator.onPageSelected(position)
        }

        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)
            magicIndicator.onPageScrollStateChanged(state)
        }
    })
}

指示器会有抖动问题

使用中没遇到过,要不打印一下第一个方法vp传过来的后两个参数?是不是vp有什么问题 vp2本身也是用recyclerview实现的,是不是有什么对他的改动?

跟踪了一下偏移量,是系统的问题,最后的变化是非线性的

我暂时没遇到过这种,知道是偏移量变化问题,可以考虑写个函数处理下返回值,做一下钝化

还是感觉是不是有什么操作让vp2没有完成惯性滑动,vp2一般都是线性完成滑动

xuwakao commented 2 years ago

同样是遇到了抖动问题,只要是已选择的indicator滑出屏幕,就开始一直抖动。

xuwakao commented 2 years ago

同样是遇到了抖动问题,只要是已选择的indicator滑出屏幕,就开始一直抖动。

解决了,设置 : isReselectWhenLayout = true