好的,我无法控制播放动画的持续时间,所以我还必须以编程方式定义动画。
基类:
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import org.dermagerestudent.ehrenlos.R
abstract class ViewPagerAnimatedFragment(private val layoutID: Int, private val position: Int): Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(this.layoutID, container, false)
this.onCreate(view)
val viewPager = this@ViewPagerAnimatedFragment.activity?.findViewById<ViewPager>(R.id.main_view_pager)!!
viewPager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
if (!(this@ViewPagerAnimatedFragment.position - 1..this@ViewPagerAnimatedFragment.position).contains(position))
return
this@ViewPagerAnimatedFragment.onScroll(
if (position < this@ViewPagerAnimatedFragment.position) positionOffset else 1 - positionOffset
)
}
override fun onPageSelected(position: Int) { }
override fun onPageScrollStateChanged(state: Int) { }
})
return view
}
open fun onCreate(view: View) { }
open fun onScroll(pageVisibility: Float) { }
}
派生类示例:
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.LinearLayout
import org.dermagerestudent.ehrenlos.R
class HomeFragment(layoutID: Int, position: Int) : ViewPagerAnimatedFragment(layoutID, position) {
private lateinit var table: LinearLayout
override fun onCreate(view: View) {
this.table = view.findViewById<LinearLayout>(R.id.test_layout)
this.table.animation = AnimationUtils.loadAnimation(this.context, R.anim.fade_slide_in)
}
override fun onScroll(pageVisibility: Float) {
this.table.alpha = pageVisibility
}
}
目前,我只能实现 alpha 动画,因为我不知道如何实现百分比 y 移动。有什么帮助吗?