diff --git a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt
index 37623e9629c4ee6585aca045c44f3bbd656c6a04..97949bd60136e9abee2ec10f07a81aead4a75bae 100644
--- a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt
+++ b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt
@@ -7,6 +7,7 @@ import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.view.ViewTreeObserver
+import android.view.animation.DecelerateInterpolator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSnapHelper
import androidx.recyclerview.widget.RecyclerView
@@ -32,7 +33,7 @@ class MXScrollPickerView @JvmOverloads constructor(
layoutManager = manager
adapter = pickerAdapt
pickerAdapt.setItemClick { position, _ ->
- smoothScrollTo(position - itemOffset)
+ smoothScrollTo(position - itemOffset, true)
}
addOnScrollListener(object : OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
@@ -94,9 +95,9 @@ class MXScrollPickerView @JvmOverloads constructor(
pickerAdapt.adapt = adapt
}
- fun setSelectIndex(index: Int) {
+ fun setSelectIndex(index: Int, animation: Boolean = false) {
val position = max(0, index)
- smoothScrollTo(position)
+ smoothScrollTo(position, animation)
}
fun setOnSelectListener(listener: IMXSelect?) {
@@ -137,8 +138,17 @@ class MXScrollPickerView @JvmOverloads constructor(
currentSelectIndex = targetIndex
itemSelect?.onSelect(targetIndex)
}
- private fun smoothScrollTo(position: Int) {
+
+ private fun smoothScrollTo(position: Int, animation: Boolean) {
notifySelectChange(position)
- manager.scrollToPositionWithOffset(position, 0)
+ if (animation && itemHeight > 0) {
+ val current = manager.findFirstCompletelyVisibleItemPosition()
+ smoothScrollBy(
+ 0, itemHeight * (position - current),
+ DecelerateInterpolator(), 300
+ )
+ } else {
+ manager.scrollToPositionWithOffset(position, 0)
+ }
}
}
\ No newline at end of file
diff --git a/README.md b/README.md
index 9111ac0981208619475633a831dcdd3d06a4fd85..c063ef09bdb711700e314045a604c19170368be3 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
[](https://jitpack.io/#com.gitee.zhangmengxiong/MXRecycleAdapt)
```gradle
- implementation 'com.gitee.zhangmengxiong:MXRecycleAdapt:1.2.3'
+ implementation 'com.gitee.zhangmengxiong:MXRecycleAdapt:1.2.4'
```
#### 介绍
adapt快速开发基类
diff --git a/app/src/main/java/com/mx/recycle_adapt/activity/ScrollerViewActivity.kt b/app/src/main/java/com/mx/recycle_adapt/activity/ScrollerViewActivity.kt
index 401e5105f9bea9d54504e815da6f157ec27104ba..c50391a677bdbe686d939af241453c1ee2c8c980 100644
--- a/app/src/main/java/com/mx/recycle_adapt/activity/ScrollerViewActivity.kt
+++ b/app/src/main/java/com/mx/recycle_adapt/activity/ScrollerViewActivity.kt
@@ -11,6 +11,7 @@ import com.mx.adapt.scroller.IMXSelect
import com.mx.recycle_adapt.R
import com.mx.recycle_adapt.databinding.AdaptSimpleIndexBinding
import kotlinx.android.synthetic.main.activity_scroller_view.*
+import kotlin.random.Random
class ScrollerViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -37,6 +38,9 @@ class ScrollerViewActivity : AppCompatActivity() {
adapt.list.add(currentIndex, currentIndex)
adapt.notifyDataSetChanged()
}
+ scrollTxv.setOnClickListener {
+ scrollerView.setSelectIndex(Random.nextInt(adapt.list.size), true)
+ }
}
diff --git a/app/src/main/res/layout/activity_scroller_view.xml b/app/src/main/res/layout/activity_scroller_view.xml
index 28ba32b8997368ae8338cb64aec3ee924d8176fc..353ba60aa48215c9eeb959b508837a99f9506c1f 100644
--- a/app/src/main/res/layout/activity_scroller_view.xml
+++ b/app/src/main/res/layout/activity_scroller_view.xml
@@ -4,24 +4,41 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+ android:gravity="center"
+ android:orientation="horizontal">
-
+
+
+
+
+