本文共 2213 字,大约阅读时间需要 7 分钟。
京东到家APP引导页采用了简洁直观的滑动切换结合旋转动效的设计方式。本文将从布局、动画、资源及代码实现等方面对其技术细节进行深入分析。
引导页面采用ConstraintLayout作为容器布局,主要由ViewPager、Lottie动画视图以及其他组件构成。视图页面切换采用UltraViewPager实现,每个页面都包含一个Lottie动画,动画播放完成后自动切换页面。
引导页所需背景图、Lottie动画及切换动效等资源均存放于src/main/assets目录下。通过LottieConfig.json文件 controlling各个页面的动画表现,包括动画时间、重复次数及旋转效果等设置。
class GuideTransformer(context: Context, private val mRadius: Int) : ViewPager.PageTransformer { private var mMaxRotate = 0f init { if (mRadius > 0) { mMaxRotate = 2.0 * Math.toDegrees(atan2( ScreenHelper.getScreenWidth(context).toDouble() / 2, mRadius.toDouble() )) .toFloat() } } override fun transformPage(page: View, position: Float) { if (mRadius == 0) { return } when { position < -1.0f -> { page.rotation = -1.0f * mMaxRotate page.pivotX = (page.width.toFloat()) page.pivotY = (page.height.toFloat()) } position <= 1.0f -> { if (position < 0.0f) { page.pivotX = (page.width * (0.5f + 0.5f * -position)).toFloat() page.pivotY = (page.height.toFloat()) page.rotation = position * mMaxRotate } else { page.pivotX = (0.5f * page.width * (1.0f - position)).toFloat() page.pivotY = (page.height.toFloat()) page.rotation = position * mMaxRotate } } else -> { page.rotation = mMaxRotate page.pivotX = 0f page.pivotY = (page.height.toFloat()) } } }}
整个引导页实现采用了以下关键技术组合:
建议在实际开发中,按照上述引导页架构进行扩展和优化,确保各类动画效果正常运行。
转载地址:http://axtyk.baihongyu.com/