2018-01-04 19:52:25 +01:00
|
|
|
package jp.juggler.subwaytooter.util
|
|
|
|
|
2018-01-17 18:39:16 +01:00
|
|
|
import android.support.v7.widget.RecyclerView
|
|
|
|
import jp.juggler.subwaytooter.ColumnViewHolder
|
2018-01-04 19:52:25 +01:00
|
|
|
|
2018-01-19 10:27:35 +01:00
|
|
|
class ScrollPosition {
|
2018-01-04 19:52:25 +01:00
|
|
|
|
2018-01-19 10:27:35 +01:00
|
|
|
var adapterIndex : Int
|
2018-11-25 16:11:25 +01:00
|
|
|
|
|
|
|
// 先頭要素のピクセルオフセット。 通常は <= 0 だが、topMarginがある場合は >0 になりうる
|
2018-01-19 10:27:35 +01:00
|
|
|
val offset : Int
|
2018-01-04 19:52:25 +01:00
|
|
|
|
2018-11-25 16:11:25 +01:00
|
|
|
val isHead : Boolean
|
|
|
|
get() = adapterIndex == 0 && offset >= 0
|
|
|
|
|
|
|
|
override fun toString() : String ="ScrlPos($adapterIndex,$offset)"
|
|
|
|
|
2018-01-19 10:27:35 +01:00
|
|
|
constructor(adapterIndex : Int, top : Int) {
|
|
|
|
this.adapterIndex = adapterIndex
|
|
|
|
this.offset = top
|
|
|
|
}
|
2018-01-17 18:39:16 +01:00
|
|
|
|
2018-01-19 10:27:35 +01:00
|
|
|
constructor(holder : ColumnViewHolder) {
|
|
|
|
val layoutManager = holder.listLayoutManager
|
|
|
|
val findPosition = layoutManager.findFirstVisibleItemPosition()
|
|
|
|
if(findPosition == RecyclerView.NO_POSITION) {
|
|
|
|
adapterIndex = 0
|
|
|
|
offset = 0
|
|
|
|
} else {
|
|
|
|
adapterIndex = findPosition
|
|
|
|
val firstItemView = layoutManager.findViewByPosition(findPosition)
|
|
|
|
offset = firstItemView?.top ?: 0
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-19 10:27:35 +01:00
|
|
|
fun restore(holder : ColumnViewHolder) {
|
2018-09-27 16:21:37 +02:00
|
|
|
val adapter = holder.listView.adapter ?: return
|
|
|
|
if(adapterIndex in 0 until adapter.itemCount) {
|
2018-01-19 10:27:35 +01:00
|
|
|
holder.listLayoutManager.scrollToPositionWithOffset(adapterIndex, offset)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|