46 lines
1.6 KiB
Kotlin
46 lines
1.6 KiB
Kotlin
|
package code.name.monkey.retromusic
|
||
|
|
||
|
import android.content.Context
|
||
|
import android.util.AttributeSet
|
||
|
import android.view.ViewGroup
|
||
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||
|
import androidx.recyclerview.widget.RecyclerView
|
||
|
|
||
|
class PeekingLinearLayoutManager : LinearLayoutManager {
|
||
|
@JvmOverloads
|
||
|
constructor(
|
||
|
context: Context?,
|
||
|
@RecyclerView.Orientation orientation: Int = RecyclerView.VERTICAL,
|
||
|
reverseLayout: Boolean = false
|
||
|
) : super(context, orientation, reverseLayout)
|
||
|
|
||
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(
|
||
|
context,
|
||
|
attrs,
|
||
|
defStyleAttr,
|
||
|
defStyleRes
|
||
|
)
|
||
|
|
||
|
override fun generateDefaultLayoutParams() =
|
||
|
scaledLayoutParams(super.generateDefaultLayoutParams())
|
||
|
|
||
|
override fun generateLayoutParams(lp: ViewGroup.LayoutParams?) =
|
||
|
scaledLayoutParams(super.generateLayoutParams(lp))
|
||
|
|
||
|
override fun generateLayoutParams(c: Context?, attrs: AttributeSet?) =
|
||
|
scaledLayoutParams(super.generateLayoutParams(c, attrs))
|
||
|
|
||
|
private fun scaledLayoutParams(layoutParams: RecyclerView.LayoutParams) =
|
||
|
layoutParams.apply {
|
||
|
when (orientation) {
|
||
|
HORIZONTAL -> width = (horizontalSpace * ratio).toInt()
|
||
|
VERTICAL -> height = (verticalSpace * ratio).toInt()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private val horizontalSpace get() = width - paddingStart - paddingEnd
|
||
|
|
||
|
private val verticalSpace get() = height - paddingTop - paddingBottom
|
||
|
|
||
|
private val ratio = 0.8f // change to 0.7f for 70%
|
||
|
}
|