Skip to content

Commit

Permalink
changed objects to files
Browse files Browse the repository at this point in the history
  • Loading branch information
pknotfound committed Oct 24, 2020
1 parent 9414238 commit 6d61ab0
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 166 deletions.
163 changes: 80 additions & 83 deletions SwipeToDelete/src/main/java/com/kedia/swipetodelete/DragAndDrop.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,114 +6,111 @@ import android.view.View
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView

object DragAndDrop: View.OnTouchListener, GestureDetector.OnGestureListener {

private lateinit var gestureDetector: GestureDetector
private lateinit var touchHelper: ItemTouchHelper
private lateinit var gestureDetector: GestureDetector
private lateinit var touchHelper: ItemTouchHelper

private lateinit var holder: RecyclerView.ViewHolder
private lateinit var holder: RecyclerView.ViewHolder

fun RecyclerView.addDragToShift(listener: onDragged? = null): ItemTouchHelper {

val itemTouchCallback = object : ItemTouchHelper.Callback() {
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
viewHolder!!.itemView.alpha = 0.2f
}
}

override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
super.clearView(recyclerView, viewHolder)
viewHolder.itemView.alpha = 1f
}
fun RecyclerView.addDragToShift(listener: OnDragged? = null) {

override fun isItemViewSwipeEnabled(): Boolean {
return false
val itemTouchCallback = object : ItemTouchHelper.Callback() {
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
viewHolder!!.itemView.alpha = 0.2f
}
}

override fun isLongPressDragEnabled(): Boolean {
return false
}
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
super.clearView(recyclerView, viewHolder)
viewHolder.itemView.alpha = 1f
}

override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
holder = viewHolder
holder.itemView.setGestures()
val drags =
ItemTouchHelper.START or ItemTouchHelper.END or ItemTouchHelper.UP or ItemTouchHelper.DOWN
return makeMovementFlags(
drags,
0
)
}
override fun isItemViewSwipeEnabled(): Boolean {
return false
}

override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
listener?.onPositionDragged(viewHolder.adapterPosition, target.adapterPosition)
adapter?.notifyItemMoved(viewHolder.adapterPosition, target.adapterPosition)
return true
}
override fun isLongPressDragEnabled(): Boolean {
return false
}

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
holder = viewHolder
holder.itemView.setGestures()
val drags =
ItemTouchHelper.START or ItemTouchHelper.END or ItemTouchHelper.UP or ItemTouchHelper.DOWN
return makeMovementFlags(
drags,
0
)
}

override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
listener?.onPositionDragged(viewHolder.adapterPosition, target.adapterPosition)
adapter?.notifyItemMoved(viewHolder.adapterPosition, target.adapterPosition)
return true
}

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}

val itemTouchHelper = ItemTouchHelper(itemTouchCallback)
itemTouchHelper.attachToRecyclerView(this)
touchHelper = itemTouchHelper
return itemTouchHelper
}


fun View.setGestures() {
gestureDetector = GestureDetector(this.context, this@DragAndDrop)
this.setOnTouchListener(this@DragAndDrop)
}
val itemTouchHelper = ItemTouchHelper(itemTouchCallback)
itemTouchHelper.attachToRecyclerView(this)
touchHelper = itemTouchHelper
}

override fun onTouch(v: View?, event: MotionEvent?): Boolean {
gestureDetector.onTouchEvent(event)
return true
}

override fun onDown(e: MotionEvent?): Boolean {
return false
}
fun View.setGestures() {
gestureDetector = GestureDetector(this.context, object : GestureDetector.OnGestureListener {
override fun onShowPress(p0: MotionEvent?) {

override fun onShowPress(e: MotionEvent?) {}
}

override fun onSingleTapUp(e: MotionEvent?): Boolean {
override fun onSingleTapUp(p0: MotionEvent?): Boolean {
return false
}

return false
}
override fun onDown(p0: MotionEvent?): Boolean {
return false
}

override fun onScroll(
e1: MotionEvent?,
e2: MotionEvent?,
distanceX: Float,
distanceY: Float
): Boolean {
return false
}
override fun onFling(
p0: MotionEvent?,
p1: MotionEvent?,
p2: Float,
p3: Float
): Boolean {
return false
}

override fun onLongPress(e: MotionEvent?) {
touchHelper.startDrag(holder)
}
override fun onScroll(
p0: MotionEvent?,
p1: MotionEvent?,
p2: Float,
p3: Float
): Boolean {
return false
}

override fun onFling(
e1: MotionEvent?,
e2: MotionEvent?,
velocityX: Float,
velocityY: Float
): Boolean {
return false
}
override fun onLongPress(p0: MotionEvent?) {
touchHelper.startDrag(holder)
}

interface onDragged {
fun onPositionDragged(positionStart: Int, positionEnd: Int)
})
this.setOnTouchListener { v, event ->
gestureDetector.onTouchEvent(event)
true
}
}

}
interface OnDragged {
fun onPositionDragged(fromPosition: Int, toPosition: Int)
}
138 changes: 66 additions & 72 deletions SwipeToDelete/src/main/java/com/kedia/swipetodelete/SwipeToDelete.kt
Original file line number Diff line number Diff line change
@@ -1,95 +1,89 @@
package com.kedia.swipetodelete

import android.graphics.Canvas
import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper.RIGHT
import androidx.recyclerview.widget.RecyclerView
import java.lang.Exception


object SwipeToDelete {
fun RecyclerView.addSwipeToDelete(
list: List<DIRECTION> = emptyList(),
listener: OnSwiped? = null,
@ColorInt colorOneInt: Int? = null,
@ColorInt colorTwoInt: Int? = null
) {

fun RecyclerView.addSwipeToDelete(
list: List<DIRECTION> = emptyList(),
listener: OnSwiped? = null,
@ColorInt colorOneInt: Int? = null,
@ColorInt colorTwoInt: Int? = null
) {

var swipeDirs = RIGHT
for (element in list) {
if (element != DIRECTION.RIGHT) {
swipeDirs = swipeDirs or DIRECTION.valueOf(element.name).direction
}
var swipeDirs = ItemTouchHelper.RIGHT
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
}
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?.swipeToDelete(adapterPosition = viewHolder.adapterPosition)
this@addSwipeToDelete.adapter?.notifyItemRemoved(viewHolder.adapterPosition)
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
listener?.swipeToDelete(adapterPosition = viewHolder.adapterPosition)
this@addSwipeToDelete.adapter?.notifyItemRemoved(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())
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 == null)
throw Exception("Color One cannot be null if Color Two is non null")

if (colorTwoInt == null) {
if (colorTwoInt == null) {
colorOneInt?.apply { c.drawColor(this) }
} else {
if(dX < width / 2)
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
)
else
colorTwoInt?.apply { c.drawColor(this) }
}
}
ItemTouchHelper(simpleCallback).attachToRecyclerView(this)
}

private fun Float.isPositive(): Boolean {
return this > 0
super.onChildDraw(
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
}
}
ItemTouchHelper(simpleCallback).attachToRecyclerView(this)
}

interface OnSwiped {
fun swipeToDelete(adapterPosition: Int)
}
private fun Float.isPositive(): Boolean {
return this > 0
}

enum class DIRECTION(val direction: Int) {
UP (ItemTouchHelper.UP),
DOWN(ItemTouchHelper.DOWN),
RIGHT(ItemTouchHelper.RIGHT),
LEFT(ItemTouchHelper.LEFT)
}
interface OnSwiped {
fun swipeToDelete(adapterPosition: Int)
}

}
enum class DIRECTION(val direction: Int) {
UP (ItemTouchHelper.UP),
DOWN(ItemTouchHelper.DOWN),
RIGHT(ItemTouchHelper.RIGHT),
LEFT(ItemTouchHelper.LEFT)
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/kedia/customswipelibrary/Adapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ class Adapter(
this.list.removeAt(adapterPosition)
}

fun moveItem(start: Int, end: Int) {
val temp = list[start]
list[start] = list[end]
list[end] = temp
}

inner class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

private var textView = itemView.findViewById<TextView>(R.id.textView)
Expand Down
Loading

0 comments on commit 6d61ab0

Please sign in to comment.