ImageSwitcher 在 registerOnPageChangeCallback 中使用时未设置初始图像。但如果我把它包在里面Handler.postdelay(),它就可以工作了。
介绍片段.kg
class IntroFragment : BaseFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.fragment_intro, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val viewPagerAdapter = IntroViewPagerAdapter(childFragmentManager, lifecycle)
viewPager2.adapter = viewPagerAdapter
val images = arrayOf(R.drawable.ic_knowledge, R.drawable.ic_privacy)
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
private var skipButtonVisible = true
override fun onPageScrollStateChanged(state: Int) = Unit
override fun onPageSelected(position: Int) {
imageSwitcher.setImageResource(images[position])
}
})
imageSwitcher.setFactory { ImageView(activity?.applicationContext) }
imageSwitcher.setImageResource(images[0])
}
}
IntroViewPagerAdapter.kt
class IntroViewPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {
private val fragments = listOf<Fragment>(
SlideFragment.newInstance(titleText, R.string.Description1),
SlideFragment.newInstance(titleText2, R.string.Description2),
)
override fun getItemCount(): Int = fragments.size
override fun createFragment(position: Int): Fragment = fragments[position]
}
片段介绍.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/introLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:windowBackground"
android:clickable="true">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_width="280dp"
android:layout_height="280dp"
android:inAnimation="@android:anim/fade_in"
android:outAnimation="@android:anim/fade_out"
android:transitionName="welcome_wallet_logo"
app:layout_constraintBottom_toTopOf="@+id/verticalCenter"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>