کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView
12 فروردین 1400 1400-01-12 11:54کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView
کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView
Bouncy recyclerview بهت کمک میکنه تا یه ریسایکلرویو خیلی پیشرفتهای درست کنی.
اکثر اپلیکیشنهای اندرویدی که درست میکنیم ممکنه که RecyclerView داشته باشه.
پس چه بهتر که به این RecyclerView امکاناتی رو اضافه کنیم که هم برای کاربران جذابتر باشه، هم اینکه برنامه ما رو حرفهای تر جلوه بده.
چرا باید از Bouncy استفاده کنم ؟
راستش این کتابخونه امکانات خیلی خوب و زیادی داره.
ازطرفی سورسکد اصلی کتابخونه هم بهینه نوشته شده و با خیال راحت میتونی ازش استفاده کنی.
امکانات این کتابخونه
- اضافه کردن حالت فنری به RecyclerView (فنری بودن)
- اضافه کردن حالت Drag & Drop آیتمها (کشیدن و رها کردن)
- اضافه کردن حالت Swipe آیتمها (کشیدن به چپ و راست)
اینها امکاناتی هستش که به جذابیت RecyclerVIew شما کمک میکنه.
اضافه کردن به پروژه
برای اینکه از این کتابخونه استفاده کنی باید کد زیر رو به build.gradle اضافه کنی
implementation 'com.factor:bouncy:1.8'
بعد از اضافه کردن کد بالا پروژه رو sync کن.
خب بعد از اینکه پروژه با موفقیت sync شد، دیگه میتونی ازش استفاده کنی.
آموزش استفاده از این کتابخونه
برای اینکه از این کتابخونه استفاده کنی، باید کد زیر رو به فایل XML اضافه کنی.
برای اینکار میتونی از کد زیر استفاده کنی
<com.factor.bouncy.BouncyRecyclerView android:id="@+id/bounceList_recyclerView" android:layout_width="match_parent" android:layout_height="0dp" app:allow_drag_reorder="true" app:allow_item_swipe="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/bounceList_toolbar" app:recyclerview_damping_ratio="DAMPING_RATIO_LOW_BOUNCY" app:recyclerview_fling_animation_size=".7" app:recyclerview_overscroll_animation_size=".7" app:recyclerview_stiffness="STIFFNESS_MEDIUM" />
با کد بالا ما view مربوط به این ریسایکلرویو رو به پروژه اضافه کردیم.
بعد از این مرحله باید کدهای مربوط به Adapter رو بنویسیم.
کدهای Adapter
برای استفاده از این کتابخونه بجای اینکه adapter شما از RecyclerView.Adapter ارث بری کنه، باید از BouncyRecyclerView.Adapter ارث بری کنه.
بعد از اینکه از BouncyRecyclerView.Adapter ارث بری کردی، چندتا متد جدید به adapter اضافه میشه.
کد زیر، کد کامل adapter هستش
class BounceAdapter constructor(private val model: MutableList<TitleModel>) : BouncyRecyclerView.Adapter<BounceAdapter.MyViewHolder>() { private lateinit var context: Context override fun getItemCount(): Int { return model.size } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { holder.bindData(model[position]) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { context = parent.context return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_bounce_list, parent, false)) } override fun onItemMoved(fromPosition: Int, toPosition: Int) { Collections.swap(model, fromPosition, toPosition) notifyItemMoved(fromPosition, toPosition) } override fun onItemReleased(viewHolder: RecyclerView.ViewHolder) { viewHolder.itemView.alpha = 1f } override fun onItemSelected(viewHolder: RecyclerView.ViewHolder?) { viewHolder?.itemView?.alpha = 0.5f } override fun onItemSwipedToEnd(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) { } override fun onItemSwipedToStart(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) { viewHolder.itemView.findViewById<ImageView>(R.id.itemBounce_delete).visibility = View.VISIBLE viewHolder.itemView.findViewById<ImageView>(R.id.itemBounce_delete).setOnClickListener { removeAt(positionOfItem) } notifyItemChanged(positionOfItem) } private fun removeAt(position: Int) { model.removeAt(position) notifyItemRemoved(position) notifyItemRangeChanged(position, model.size) } class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val title = itemView.findViewById(R.id.itemBounce_title) as TextView fun bindData(data: TitleModel) { title.text = data.title } } }
توی کد بالا به صورت کامل کدهای adapter رو قرار دادم و حالا میخوام متدهای جدیدی که اضافه شدن رو توضیح بدم.
توضیحات متدهای جدید
همانطور که گفتم بعد از اینکه از bouncy استفاده میکنی یکسری متدهای جدید به adapter اضافه میشه.
بریم که این متدها رو هم توضیح بدم.
override fun onItemMoved(fromPosition: Int, toPosition: Int) { }
برای حالت Drag & Drop یا جابجایی آیتمها استفاده میشه
override fun onItemSelected(viewHolder: RecyclerView.ViewHolder?) { }
موقع گرفتن و کشیدن آیتمها این متد فراخوانی میشه.
override fun onItemReleased(viewHolder: RecyclerView.ViewHolder) { }
موقع رها کردن آیتمها این متد فراخوانی میشه.
override fun onItemSwipedToEnd(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) { }
موقعی که آیتمها رو به راست میکشی این متد صدا زده میشه.
override fun onItemSwipedToStart(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) { }
موقعی که آیتمها رو به چپ میکشی این متد صدا زده میشه.
خب حالا که کدهای مربوط به adapter رو متوجه شدی بهتره بریم که ازش توی activity/fragment استفاده کنیم.
استفاده از کتابخونه در Activity/Fragment
با کد زیر میتونی adapter که بالا ساختی رو به bouncy recyclerview اعمال کنی
bounceAdapter = BounceAdapter(titleList) bounceList_recyclerView.adapter = bounceAdapter bounceList_recyclerView.layoutManager = LinearLayoutManager(this)
توی این پست سعی کردم این کتابخونه رو تا جای ممکن توضیح بدم.
ولی اگه به طور کامل با تک تک این بخشها میخوای آشنا بشی حتما توصیه میکنم ویدیو زیر رو ببینی.
توی این ویدیو به طور کامل و با جزئیات زیاد این کتابخونه رو آموزش دادم
نمایش آموزش ویدیوای کار با کتابخونه