54 lines
1.8 KiB
Kotlin
54 lines
1.8 KiB
Kotlin
/*
|
|
* Copyright (c) 2019 Hemanth Savarala.
|
|
*
|
|
* Licensed under the GNU General Public License v3
|
|
*
|
|
* This is free software: you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details.
|
|
*/
|
|
|
|
package code.name.monkey.retromusic.transform
|
|
|
|
import android.content.Context
|
|
import android.view.View
|
|
import androidx.viewpager.widget.ViewPager
|
|
import kotlin.math.abs
|
|
|
|
class CarousalPagerTransformer(context: Context) : ViewPager.PageTransformer {
|
|
|
|
private val maxTranslateOffsetX: Int
|
|
private var viewPager: ViewPager? = null
|
|
|
|
init {
|
|
this.maxTranslateOffsetX = dp2px(context, 180f)
|
|
}
|
|
|
|
override fun transformPage(view: View, position: Float) {
|
|
if (viewPager == null) {
|
|
viewPager = view.parent as ViewPager
|
|
}
|
|
|
|
val leftInScreen = view.left - viewPager!!.scrollX
|
|
val centerXInViewPager = leftInScreen + view.measuredWidth / 2
|
|
val offsetX = centerXInViewPager - viewPager!!.measuredWidth / 2
|
|
val offsetRate = offsetX.toFloat() * 0.30f / viewPager!!.measuredWidth
|
|
val scaleFactor = 1 - abs(offsetRate)
|
|
if (scaleFactor > 0) {
|
|
view.scaleX = scaleFactor
|
|
view.scaleY = scaleFactor
|
|
view.translationX = -maxTranslateOffsetX * offsetRate
|
|
}
|
|
}
|
|
|
|
private fun dp2px(context: Context, dipValue: Float): Int {
|
|
val m = context.resources.displayMetrics.density
|
|
return (dipValue * m + 0.5f).toInt()
|
|
}
|
|
|
|
|
|
} |