From 4dfb07f0fa5eb74d8df930edc549b56803637def Mon Sep 17 00:00:00 2001 From: zhangmengxiong Date: Wed, 29 Mar 2023 19:50:50 +0800 Subject: [PATCH] 666 --- .gitignore | 1 + ...crollerAdapt.kt => MXScrollPickerAdapt.kt} | 4 +- ...XScrollerView.kt => MXScrollPickerView.kt} | 37 ++++++++++--------- README.md | 2 +- .../activity/ScrollerViewActivity.kt | 4 +- .../res/layout/activity_scroller_view.xml | 2 +- build.gradle | 2 +- local.properties | 2 +- 8 files changed, 28 insertions(+), 26 deletions(-) rename MXAdapt/src/main/java/com/mx/adapt/scroller/{MXScrollerAdapt.kt => MXScrollPickerAdapt.kt} (95%) rename MXAdapt/src/main/java/com/mx/adapt/scroller/{MXScrollerView.kt => MXScrollPickerView.kt} (78%) diff --git a/.gitignore b/.gitignore index 6bf460d..88a4667 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /.gradle /build .idea +local.properties diff --git a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerAdapt.kt b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerAdapt.kt similarity index 95% rename from MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerAdapt.kt rename to MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerAdapt.kt index 2303b95..f76c49c 100644 --- a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerAdapt.kt +++ b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerAdapt.kt @@ -8,9 +8,9 @@ import com.mx.adapt.MXBaseSimpleAdapt import com.mx.adapt.MXBaseViewHolder import com.mx.adapt.databinding.LayoutMxScrollerSpaceBinding -class MXScrollerAdapt(val scrollView: MXScrollerView) : MXBaseSimpleAdapt() { +internal class MXScrollPickerAdapt(private val scrollView: MXScrollPickerView) : + MXBaseSimpleAdapt() { var adapt: MXBaseSimpleAdapt<*>? = null - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MXBaseViewHolder { if (viewType != Int.MAX_VALUE / 2) { adapt?.onCreateViewHolder(parent, viewType)?.let { diff --git a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerView.kt b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt similarity index 78% rename from MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerView.kt rename to MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt index 9710b8c..37623e9 100644 --- a/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollerView.kt +++ b/MXAdapt/src/main/java/com/mx/adapt/scroller/MXScrollPickerView.kt @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import com.mx.adapt.MXBaseSimpleAdapt import kotlin.math.max -class MXScrollerView @JvmOverloads constructor( +class MXScrollPickerView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : RecyclerView(context, attrs) { private val manager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) @@ -25,15 +25,14 @@ class MXScrollerView @JvmOverloads constructor( private var itemSelect: IMXSelect? = null - private val delegateAdapt = MXScrollerAdapt(this) + private val pickerAdapt = MXScrollPickerAdapt(this) init { LinearSnapHelper().attachToRecyclerView(this) layoutManager = manager - adapter = delegateAdapt - delegateAdapt.setItemClick { position, _ -> - manager.scrollToPositionWithOffset(position - itemOffset, 0) - notifySelectChange(position - itemOffset) + adapter = pickerAdapt + pickerAdapt.setItemClick { position, _ -> + smoothScrollTo(position - itemOffset) } addOnScrollListener(object : OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { @@ -49,7 +48,7 @@ class MXScrollerView @JvmOverloads constructor( viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { - delegateAdapt?.notifyDataSetChanged() + pickerAdapt?.notifyDataSetChanged() viewTreeObserver.removeOnPreDrawListener(this) return true } @@ -87,19 +86,17 @@ class MXScrollerView @JvmOverloads constructor( throw Exception("数量不能为双数!") } itemSize = size - delegateAdapt.notifyDataSetChanged() + pickerAdapt.notifyDataSetChanged() } fun setAdapt(adapt: MXBaseSimpleAdapt<*>) { adapt.registerAdapterDataObserver(TypeObserver()) - delegateAdapt.adapt = adapt + pickerAdapt.adapt = adapt } fun setSelectIndex(index: Int) { val position = max(0, index) - manager.scrollToPositionWithOffset(position, position) - post { manager.scrollToPositionWithOffset(position, position) } - notifySelectChange(position) + smoothScrollTo(position) } fun setOnSelectListener(listener: IMXSelect?) { @@ -109,27 +106,27 @@ class MXScrollerView @JvmOverloads constructor( private inner class TypeObserver : AdapterDataObserver() { override fun onChanged() { - delegateAdapt.notifyDataSetChanged() + pickerAdapt.notifyDataSetChanged() } override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - delegateAdapt.notifyItemRangeInserted(positionStart + itemOffset, itemCount) + pickerAdapt.notifyItemRangeInserted(positionStart + itemOffset, itemCount) } override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { - delegateAdapt.notifyItemRangeRemoved(positionStart + itemOffset, itemCount) + pickerAdapt.notifyItemRangeRemoved(positionStart + itemOffset, itemCount) } override fun onItemRangeChanged(positionStart: Int, itemCount: Int) { - delegateAdapt.notifyItemRangeChanged(positionStart + itemOffset, itemCount) + pickerAdapt.notifyItemRangeChanged(positionStart + itemOffset, itemCount) } override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) { - delegateAdapt.notifyItemRangeChanged(positionStart + itemOffset, itemCount, payload) + pickerAdapt.notifyItemRangeChanged(positionStart + itemOffset, itemCount, payload) } override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { - delegateAdapt.notifyItemMoved(fromPosition + itemOffset, toPosition + itemOffset) + pickerAdapt.notifyItemMoved(fromPosition + itemOffset, toPosition + itemOffset) } } @@ -140,4 +137,8 @@ class MXScrollerView @JvmOverloads constructor( currentSelectIndex = targetIndex itemSelect?.onSelect(targetIndex) } + private fun smoothScrollTo(position: Int) { + notifySelectChange(position) + manager.scrollToPositionWithOffset(position, 0) + } } \ No newline at end of file diff --git a/README.md b/README.md index c6ebb83..762593c 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.1.0' + implementation 'com.gitee.zhangmengxiong:MXRecycleAdapt:1.2.2' ``` #### 介绍 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 79ccf02..401e510 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 @@ -17,7 +17,7 @@ class ScrollerViewActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_scroller_view) val adapt = SpanCountAdapt() - adapt.list.addAll((0 until 13)) + adapt.list.addAll((0 until 130)) adapt.notifyDataSetChanged() scrollerView.setItemSize(5) @@ -30,7 +30,7 @@ class ScrollerViewActivity : AppCompatActivity() { currentIndex = index } }) - scrollerView.setSelectIndex(10) + scrollerView.setSelectIndex(100) scrollerView.setDashColor(Color.parseColor("#33465FCD")) addTxv.setOnClickListener { diff --git a/app/src/main/res/layout/activity_scroller_view.xml b/app/src/main/res/layout/activity_scroller_view.xml index 29a6a57..28ba32b 100644 --- a/app/src/main/res/layout/activity_scroller_view.xml +++ b/app/src/main/res/layout/activity_scroller_view.xml @@ -23,7 +23,7 @@ android:textColor="#000000" android:textSize="14sp" /> - diff --git a/build.gradle b/build.gradle index 269726e..5ede8fc 100644 --- a/build.gradle +++ b/build.gradle @@ -35,5 +35,5 @@ ext { minSdkVersion = 19 versionCode = 1 - versionName = "1.2.1" + versionName = "1.2.2" } \ No newline at end of file diff --git a/local.properties b/local.properties index ccc0961..25df42e 100644 --- a/local.properties +++ b/local.properties @@ -5,4 +5,4 @@ # For customization when using a Version Control System, please read the # header note. #Wed Mar 29 16:24:36 CST 2023 -sdk.dir=D\:\\DevTools\\WinAndroidSdk +sdk.dir=D\:\\DevTools\\AndroidSDK -- Gitee