Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.furs.knotes.ui.recycler
- import android.graphics.Canvas
- import android.graphics.Paint
- import android.graphics.Rect
- import android.graphics.RectF
- import android.view.View
- import androidx.recyclerview.widget.ItemTouchHelper
- import androidx.recyclerview.widget.RecyclerView
- import org.furs.knotes.R
- import org.furs.knotes.data.TextNote
- class ItemTouchHelperCallback(
- private val adapter: NoteAdapter,
- private val swipeListener: (TextNote) -> Unit
- ) : ItemTouchHelper.Callback() {
- private val bgRect = RectF()
- private val bgPaint = Paint(Paint.ANTI_ALIAS_FLAG)
- private val iconBounds = Rect()
- override fun getMovementFlags(
- recyclerView: RecyclerView,
- viewHolder: RecyclerView.ViewHolder
- ): Int {
- return if(viewHolder is ItemTouchViewHolder) {
- makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE, ItemTouchHelper.START)
- } else {
- makeFlag(ItemTouchHelper.ACTION_STATE_IDLE, ItemTouchHelper.START)
- }
- }
- override fun onMove(
- recyclerView: RecyclerView,
- viewHolder: RecyclerView.ViewHolder,
- target: RecyclerView.ViewHolder
- ): Boolean {
- return false
- }
- override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
- if(viewHolder is ItemTouchViewHolder) {
- swipeListener.invoke(adapter.items[viewHolder.adapterPosition])
- }
- }
- override fun onChildDraw(
- canvas: Canvas,
- recyclerView: RecyclerView,
- viewHolder: RecyclerView.ViewHolder,
- dX: Float,
- dY: Float,
- actionState: Int,
- isCurrentlyActive: Boolean
- ) {
- if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
- val itemView = viewHolder.itemView
- drawBackground(canvas, itemView, dX)
- drawIcon(canvas, itemView, dX)
- }
- super.onChildDraw(canvas, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
- }
- override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
- if(actionState != ItemTouchHelper.ACTION_STATE_IDLE && viewHolder is ItemTouchViewHolder) {
- viewHolder.onItemSelected()
- }
- super.onSelectedChanged(viewHolder, actionState)
- }
- override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
- if(viewHolder is ItemTouchViewHolder) {
- viewHolder.onItemCleared()
- }
- super.clearView(recyclerView, viewHolder)
- }
- private fun drawBackground(
- canvas: Canvas,
- itemView: View,
- dX: Float
- ) {
- with(bgRect) {
- left = dX
- top = itemView.top.toFloat()
- right = itemView.right.toFloat()
- bottom = itemView.bottom.toFloat()
- }
- with(bgPaint) {
- color = itemView.resources.getColor(R.color.item_swipe_background, itemView.context.theme)
- }
- canvas.drawRect(bgRect, bgPaint)
- }
- private fun drawIcon(
- canvas: Canvas,
- itemView: View,
- dX: Float
- ) {
- val icon = itemView.resources.getDrawable(R.drawable.ic_remove_swipe, itemView.context.theme)
- val iconSize = itemView.resources.getDimensionPixelSize(R.dimen.icon_size)
- val space = itemView.resources.getDimensionPixelSize(R.dimen.space_normal_16)
- val margin = (itemView.bottom - itemView.top - iconSize) / 2
- with(iconBounds) {
- left = itemView.right + dX.toInt() + space
- top = itemView.top + margin
- right = itemView.right + dX.toInt() + iconSize + space
- bottom = itemView.bottom - margin
- }
- icon.bounds = iconBounds
- icon.draw(canvas)
- }
- interface ItemTouchViewHolder {
- fun onItemSelected()
- fun onItemCleared()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement