如何统计 ViewPager2 中发生的滑动

How to tally the swipes that occur in ViewPager2

所以我创建了一个带有图片的旋转木马类型的应用程序。我想记录用户的滑动次数并显示在柜台上。

*计数器在“滑动次数”旁边

这是我到目前为止在代码中得到的内容

class MainFragment: Fragment() {

//    private lateinit var manager: RecyclerView.LayoutManager
    private lateinit var viewPager: ViewPager2
    private var counter: Int = 0


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding: MainFragmentBinding = DataBindingUtil.inflate(
            inflater,
            R.layout.main_fragment,
            container, false)

        viewPager = binding.imageSlider


        val data: MutableList<CarouselItem> = ArrayList()
        data.add(CarouselItem(1, bcw_65, "First"))
        data.add(CarouselItem(2, bcw_66, "Second"))
        data.add(CarouselItem(3, bcw_67, "Third"))
        data.add(CarouselItem(4, bcw_68, "Fourth"))
        data.add(CarouselItem(5, bcw_69, "Fifth"))
        data.add(CarouselItem(6, bcw_70, "Sixth"))
        data.add(CarouselItem(2, bcw_71, "Seventh"))

        viewPager.adapter = CarouselItemAdapter(data, viewPager)

        viewPager.clipToPadding = false
        viewPager.clipChildren = false
        viewPager.offscreenPageLimit = 3
        viewPager.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER

        val compositePageTransformer = CompositePageTransformer()
        compositePageTransformer.addTransformer(MarginPageTransformer(30))
        compositePageTransformer.addTransformer { page, position ->
            val r = 1 - abs(position)
            page.scaleY = 0.85f + r * 0.25f
        }

        viewPager.setPageTransformer(compositePageTransformer)

//        binding.imageSlider.setOnTouchListener{}
        binding.imageSlider.setOnTouchListener { v, event ->
            counter++
            Log.d(TAG, "onCreateView: Swipe Recorded")
            true
        }

        binding.counterView.text = counter.toString()




        return binding.root
    }

}

我已经尝试了一些东西,但它似乎仍然没有真正起作用。任何想法将不胜感激。

ViewPager2.OnPageChangeCallback 添加到您的寻呼机:

class MainFragment: Fragment() {
    private lateinit var viewPager: ViewPager2
    private var counter: Int = 0
    private var pageChangeCallback: ViewPager2.OnPageChangeCallback? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        ...
        viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                counter++
                binding.counterView.text = counter.toString()
            }
        }.also { pageChangeCallback = it })
        ...
    }

    override fun onDestroyView() {
        super.onDestroyView()
        viewPager.unregisterOnPageChangeCallback(pageChangeCallback!!)
        pageChangeCallback = null
    }
}