Add support for drawables in ReadropsItemTouchCallback
This commit is contained in:
parent
505fb5a7c4
commit
04eb496d9e
@ -109,8 +109,8 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
|
|||||||
new ItemTouchHelper(new ReadropsItemTouchCallback(this,
|
new ItemTouchHelper(new ReadropsItemTouchCallback(this,
|
||||||
new ReadropsItemTouchCallback.Config.Builder()
|
new ReadropsItemTouchCallback.Config.Builder()
|
||||||
.swipeDirs(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
|
.swipeDirs(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
|
||||||
.leftDraw(Color.RED, R.drawable.ic_delete)
|
.leftDraw(Color.RED, R.drawable.ic_delete, null)
|
||||||
.rightDraw(Color.RED, R.drawable.ic_delete)
|
.rightDraw(Color.RED, R.drawable.ic_delete, null)
|
||||||
.swipeCallback((viewHolder, direction) -> {
|
.swipeCallback((viewHolder, direction) -> {
|
||||||
parseItemsAdapter.remove(viewHolder.getAdapterPosition());
|
parseItemsAdapter.remove(viewHolder.getAdapterPosition());
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.readrops.app.activities;
|
package com.readrops.app.activities;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -20,6 +20,7 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.paging.PagedList;
|
import androidx.paging.PagedList;
|
||||||
@ -384,12 +385,16 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
|||||||
|
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
|
|
||||||
|
Drawable readLater = getDrawable(R.drawable.ic_read_later);
|
||||||
|
DrawableCompat.setTint(readLater, ContextCompat.getColor(this, android.R.color.white));
|
||||||
|
|
||||||
new ItemTouchHelper(new ReadropsItemTouchCallback(this,
|
new ItemTouchHelper(new ReadropsItemTouchCallback(this,
|
||||||
new ReadropsItemTouchCallback.Config.Builder()
|
new ReadropsItemTouchCallback.Config.Builder()
|
||||||
.swipeDirs(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
|
.swipeDirs(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
|
||||||
.swipeCallback(this)
|
.swipeCallback(this)
|
||||||
.leftDraw(Color.DKGRAY, R.drawable.ic_read_later)
|
.leftDraw(ContextCompat.getColor(this, R.color.colorAccent), R.drawable.ic_read_later, readLater)
|
||||||
.rightDraw(Color.DKGRAY, R.drawable.ic_read)
|
.rightDraw(ContextCompat.getColor(this, R.color.colorAccent), R.drawable.ic_read, null)
|
||||||
.build()))
|
.build()))
|
||||||
.attachToRecyclerView(recyclerView);
|
.attachToRecyclerView(recyclerView);
|
||||||
|
|
||||||
@ -404,7 +409,7 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
|
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
|
||||||
if (scrollToTop) {
|
;if (scrollToTop) {
|
||||||
recyclerView.scrollToPosition(0);
|
recyclerView.scrollToPosition(0);
|
||||||
scrollToTop = false;
|
scrollToTop = false;
|
||||||
} else
|
} else
|
||||||
|
@ -7,12 +7,14 @@ import android.graphics.drawable.Drawable
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
|
import androidx.annotation.Nullable
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class ReadropsItemTouchCallback(private val context: Context, private val config: Config) : ItemTouchHelper.SimpleCallback(config.dragDirs, config.swipeDirs) {
|
class ReadropsItemTouchCallback(private val context: Context, private val config: Config) :
|
||||||
|
ItemTouchHelper.SimpleCallback(config.dragDirs, config.swipeDirs) {
|
||||||
|
|
||||||
private val iconHorizontalMargin = 40
|
private val iconHorizontalMargin = 40
|
||||||
|
|
||||||
@ -45,7 +47,8 @@ class ReadropsItemTouchCallback(private val context: Context, private val config
|
|||||||
background = ColorDrawable(config.leftDraw.bgColor)
|
background = ColorDrawable(config.leftDraw.bgColor)
|
||||||
background.setBounds(itemView.left, itemView.top, dX.toInt(), itemView.bottom)
|
background.setBounds(itemView.left, itemView.top, dX.toInt(), itemView.bottom)
|
||||||
|
|
||||||
icon = ContextCompat.getDrawable(context, config.leftDraw.icon)!!
|
icon = config.leftDraw.drawable
|
||||||
|
?: ContextCompat.getDrawable(context, config.leftDraw.iconRes)!!
|
||||||
val iconMargin = (itemView.height - icon.intrinsicHeight) / 2
|
val iconMargin = (itemView.height - icon.intrinsicHeight) / 2
|
||||||
icon.setBounds(itemView.left + iconHorizontalMargin, itemView.top + iconMargin,
|
icon.setBounds(itemView.left + iconHorizontalMargin, itemView.top + iconMargin,
|
||||||
itemView.left + iconHorizontalMargin + icon.intrinsicWidth, itemView.bottom - iconMargin)
|
itemView.left + iconHorizontalMargin + icon.intrinsicWidth, itemView.bottom - iconMargin)
|
||||||
@ -54,7 +57,8 @@ class ReadropsItemTouchCallback(private val context: Context, private val config
|
|||||||
background = ColorDrawable(config.rightDraw.bgColor)
|
background = ColorDrawable(config.rightDraw.bgColor)
|
||||||
background.setBounds(itemView.right + dX.toInt(), itemView.top, itemView.right, itemView.bottom)
|
background.setBounds(itemView.right + dX.toInt(), itemView.top, itemView.right, itemView.bottom)
|
||||||
|
|
||||||
icon = ContextCompat.getDrawable(context, config.rightDraw.icon)!!
|
icon = config.rightDraw.drawable
|
||||||
|
?: ContextCompat.getDrawable(context, config.rightDraw.iconRes)!!
|
||||||
val iconMargin = (itemView.height - icon.intrinsicHeight) / 2
|
val iconMargin = (itemView.height - icon.intrinsicHeight) / 2
|
||||||
icon.setBounds(itemView.right - iconHorizontalMargin - icon.intrinsicWidth, itemView.top + iconMargin,
|
icon.setBounds(itemView.right - iconHorizontalMargin - icon.intrinsicWidth, itemView.top + iconMargin,
|
||||||
itemView.right - iconHorizontalMargin, itemView.bottom - iconMargin)
|
itemView.right - iconHorizontalMargin, itemView.bottom - iconMargin)
|
||||||
@ -88,7 +92,7 @@ class ReadropsItemTouchCallback(private val context: Context, private val config
|
|||||||
fun onSwipe(viewHolder: RecyclerView.ViewHolder, direction: Int)
|
fun onSwipe(viewHolder: RecyclerView.ViewHolder, direction: Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
class SwipeDraw(@ColorInt val bgColor: Int, @DrawableRes val icon: Int)
|
class SwipeDraw(@ColorInt val bgColor: Int, @DrawableRes val iconRes: Int = 0, val drawable: Drawable?)
|
||||||
|
|
||||||
class Config(val dragDirs: Int = 0, val swipeDirs: Int = 0, val moveCallback: MoveCallback? = null,
|
class Config(val dragDirs: Int = 0, val swipeDirs: Int = 0, val moveCallback: MoveCallback? = null,
|
||||||
val swipeCallback: SwipeCallback? = null, val leftDraw: SwipeDraw? = null, val rightDraw: SwipeDraw? = null) {
|
val swipeCallback: SwipeCallback? = null, val leftDraw: SwipeDraw? = null, val rightDraw: SwipeDraw? = null) {
|
||||||
@ -123,9 +127,9 @@ class ReadropsItemTouchCallback(private val context: Context, private val config
|
|||||||
|
|
||||||
fun swipeCallback(swipeCallback: SwipeCallback) = apply { this.swipeCallback = swipeCallback }
|
fun swipeCallback(swipeCallback: SwipeCallback) = apply { this.swipeCallback = swipeCallback }
|
||||||
|
|
||||||
fun leftDraw(@ColorInt bgColor: Int, @DrawableRes icon: Int) = apply { this.leftDraw = SwipeDraw(bgColor, icon) }
|
fun leftDraw(@ColorInt bgColor: Int, @DrawableRes iconRes: Int, @Nullable icon: Drawable? = null) = apply { leftDraw = SwipeDraw(bgColor, iconRes, icon) }
|
||||||
|
|
||||||
fun rightDraw(@ColorInt bgColor: Int, @DrawableRes icon: Int) = apply { this.rightDraw = SwipeDraw(bgColor, icon) }
|
fun rightDraw(@ColorInt bgColor: Int, @DrawableRes iconRes: Int, @Nullable icon: Drawable? = null) = apply { this.rightDraw = SwipeDraw(bgColor, iconRes, icon) }
|
||||||
|
|
||||||
fun build(): Config {
|
fun build(): Config {
|
||||||
return Config(this)
|
return Config(this)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user