android - 如何计算 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
}
}
推荐阅读
- java - UNIX 无法读取 MyBatis 资源文件
- unit-testing - 在单元测试控制器 NestJs 中上传模拟文件
- ios - 如何将嵌套节点从 Firebase 实时数据库检索到 iOS 应用程序
- c++ - 为什么我的程序在使用 -fsanitize=leak 时不会停止?
- sql - 等待 x 秒后重试 SQL UPDATE 查询
- java - java - 如何在Java Swing中为非空布局组件设置绝对位置?
- spring - Spring Data JPA,如何将一个属性映射到两列?
- yaml - OpenAPI YAML 描述中的 |、> 和 >- 有什么区别?
- elasticsearch - 在 SSR 应用程序中使用 `@elastic/app-search-javascript` 会引发 Headers not defined 错误
- ebean - 具有单向 OneToMany 关系的 Ebean 在插入期间导致重复列异常