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/v/com.gitee.zhangmengxiong/MXRecycleAdapt.svg)](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"> - + + + + +