From b19edd7c4d89770821d80670edf046db940c5bbd Mon Sep 17 00:00:00 2001 From: Priyansh-Kedia Date: Thu, 1 Apr 2021 14:46:12 +0530 Subject: [PATCH] added swipe to perform --- .../com/kedia/swipetodelete/SwipeToDelete.kt | 7 +- .../com/kedia/swipetodelete/SwipeToPerform.kt | 79 +++++++++++++++++++ .../com/kedia/swipetodelete/utils/utils.kt | 10 +++ .../kedia/customswipelibrary/MainActivity.kt | 9 ++- 4 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToPerform.kt create mode 100644 SwipeToDelete/src/main/java/com/kedia/swipetodelete/utils/utils.kt diff --git a/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToDelete.kt b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToDelete.kt index a6dfebe..df9f75d 100644 --- a/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToDelete.kt +++ b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToDelete.kt @@ -4,6 +4,7 @@ import android.graphics.Canvas import androidx.annotation.ColorInt import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView +import com.kedia.swipetodelete.utils.DIRECTION import java.lang.Exception @@ -83,9 +84,3 @@ interface OnSwiped { fun swipeToDelete(adapterPosition: Int) } -enum class DIRECTION(val direction: Int) { - UP (ItemTouchHelper.UP), - DOWN(ItemTouchHelper.DOWN), - RIGHT(ItemTouchHelper.RIGHT), - LEFT(ItemTouchHelper.LEFT) -} diff --git a/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToPerform.kt b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToPerform.kt new file mode 100644 index 0000000..fcac495 --- /dev/null +++ b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToPerform.kt @@ -0,0 +1,79 @@ +package com.kedia.swipetodelete + +import android.graphics.Canvas +import androidx.annotation.ColorInt +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.RecyclerView +import com.kedia.swipetodelete.utils.DIRECTION +import java.lang.Exception + +fun RecyclerView.addSwipeToPerform( + list: List? = emptyList(), + listener: OnSwipeToPerform? = null, + @ColorInt colorOneInt: Int? = null, + @ColorInt colorTwoInt: Int? = null +) { + + var swipeDirs = ItemTouchHelper.RIGHT + list?.apply { + for (element in list) { + if (element != DIRECTION.RIGHT) { + swipeDirs = swipeDirs or DIRECTION.valueOf(element.name).direction + } + } + } + + val simpleCallback = object : ItemTouchHelper.SimpleCallback(0 , swipeDirs) { + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + return false + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + listener?.swipeToPerform(adapterPosition = viewHolder.adapterPosition) + } + + override fun onChildDraw( + c: Canvas, + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + dX: Float, + dY: Float, + actionState: Int, + isCurrentlyActive: Boolean + ) { + c.clipRect(0f, viewHolder.itemView.top.toFloat(), + dX, viewHolder.itemView.bottom.toFloat()) + + if (colorTwoInt != null && colorOneInt == null) + throw Exception("Color One cannot be null if Color Two is non null") + + if (colorTwoInt == null) { + colorOneInt?.apply { c.drawColor(this) } + } else { + if(dX < width / 2) + colorOneInt?.apply { c.drawColor(this) } + else + colorTwoInt?.apply { c.drawColor(this) } + } + + super.onChildDraw( + c, + recyclerView, + viewHolder, + dX, + dY, + actionState, + isCurrentlyActive + ) + } + } + ItemTouchHelper(simpleCallback).attachToRecyclerView(this) +} + +interface OnSwipeToPerform { + fun swipeToPerform(adapterPosition: Int) +} diff --git a/SwipeToDelete/src/main/java/com/kedia/swipetodelete/utils/utils.kt b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/utils/utils.kt new file mode 100644 index 0000000..aa24e0e --- /dev/null +++ b/SwipeToDelete/src/main/java/com/kedia/swipetodelete/utils/utils.kt @@ -0,0 +1,10 @@ +package com.kedia.swipetodelete.utils + +import androidx.recyclerview.widget.ItemTouchHelper + +enum class DIRECTION(val direction: Int) { + UP (ItemTouchHelper.UP), + DOWN(ItemTouchHelper.DOWN), + RIGHT(ItemTouchHelper.RIGHT), + LEFT(ItemTouchHelper.LEFT) +} \ No newline at end of file diff --git a/app/src/main/java/com/kedia/customswipelibrary/MainActivity.kt b/app/src/main/java/com/kedia/customswipelibrary/MainActivity.kt index 901ca62..bbe3988 100644 --- a/app/src/main/java/com/kedia/customswipelibrary/MainActivity.kt +++ b/app/src/main/java/com/kedia/customswipelibrary/MainActivity.kt @@ -1,13 +1,15 @@ package com.kedia.customswipelibrary import android.os.Bundle +import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import com.kedia.swipetodelete.* +import com.kedia.swipetodelete.utils.DIRECTION import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity(), OnSwiped, OnDragged { +class MainActivity : AppCompatActivity(), OnSwiped, OnDragged, OnSwipeToPerform { private val list = mutableListOf() private lateinit var adapter: Adapter @@ -30,6 +32,7 @@ class MainActivity : AppCompatActivity(), OnSwiped, OnDragged { val list = listOf( DIRECTION.LEFT, DIRECTION.RIGHT) + recycler.addSwipeToPerform(list, this, ContextCompat.getColor(this, R.color.colorPrimaryDark)) recycler.addSwipeToDelete(list, this, ContextCompat.getColor(this, R.color.colorPrimaryDark)) // try { // SwipeToDelete.javaClass.getDeclaredMethod("some").invoke(SwipeToDelete) @@ -46,4 +49,8 @@ class MainActivity : AppCompatActivity(), OnSwiped, OnDragged { adapter.removeItem(adapterPosition) } + override fun swipeToPerform(adapterPosition: Int) { + Log.d("TAG!!!!", "swipeToPerform: swiped") + } + } \ No newline at end of file