You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
5.2 KiB
118 lines
5.2 KiB
package com.example.doitnow;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.content.DialogInterface;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Color;
|
|
import android.graphics.Typeface;
|
|
import android.graphics.drawable.ColorDrawable;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.core.content.ContextCompat;
|
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import com.example.doitnow.Adapter.ToDoAdapter;
|
|
|
|
public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {
|
|
private ToDoAdapter adapter;
|
|
|
|
public RecyclerItemTouchHelper(ToDoAdapter adapter) {
|
|
super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
|
|
this.adapter = adapter;
|
|
}
|
|
|
|
@Override
|
|
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
|
|
final int position = viewHolder.getAdapterPosition();
|
|
if (direction == ItemTouchHelper.LEFT) {
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(adapter.getContext());
|
|
builder.setTitle("Delete Task");
|
|
builder.setMessage("Are you sure you want to delete this Task?");
|
|
builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialogInterface, int i) {
|
|
adapter.deleteItem(position);
|
|
}
|
|
});
|
|
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int i) {
|
|
adapter.notifyItemChanged(viewHolder.getAdapterPosition());
|
|
}
|
|
});
|
|
AlertDialog dialog = builder.create();
|
|
dialog.show();
|
|
|
|
TextView messageText = dialog.findViewById(android.R.id.message);
|
|
if (messageText != null) {
|
|
messageText.setTextColor(Color.parseColor("#8E7DBE")); // 紫色
|
|
messageText.setTextSize(16); // 如果你想微調大小
|
|
messageText.setGravity(Gravity.CENTER);
|
|
messageText.setTypeface(null, Typeface.BOLD);
|
|
}
|
|
TextView titleText = dialog.findViewById(
|
|
dialog.getContext().getResources().getIdentifier("alertTitle", "id", "android"));
|
|
if (titleText != null) {
|
|
titleText.setTextColor(Color.parseColor("#8E7DBE"));
|
|
titleText.setTextSize(18);
|
|
titleText.setTypeface(null, Typeface.BOLD);
|
|
}
|
|
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#8E7DBE"));
|
|
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#A0A0A0"));
|
|
} else {
|
|
adapter.editItem(position);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurretlyActive) {
|
|
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurretlyActive);
|
|
|
|
Drawable icon;
|
|
ColorDrawable background;
|
|
|
|
View itemView = viewHolder.itemView;
|
|
int backgroundCornerOffset = 20;
|
|
|
|
if (dX > 0) {
|
|
icon = ContextCompat.getDrawable(adapter.getContext(), R.drawable.baseline_edit);
|
|
background = new ColorDrawable(ContextCompat.getColor(adapter.getContext(), R.color.colorPrimaryDark));
|
|
} else {
|
|
icon = ContextCompat.getDrawable(adapter.getContext(), R.drawable.baseline_delete);
|
|
background = new ColorDrawable(Color.RED);
|
|
}
|
|
|
|
int iconMargin = (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
|
|
int iconTop = itemView.getTop() + (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
|
|
int iconButtom = iconTop + icon.getIntrinsicHeight();
|
|
|
|
if (dX > 0) { //swiping to the right
|
|
int iconLeft = itemView.getLeft() + iconMargin;
|
|
int iconRight = itemView.getLeft() + iconMargin + icon.getIntrinsicWidth();
|
|
icon.setBounds(iconLeft, iconTop, iconRight, iconButtom);
|
|
|
|
background.setBounds(itemView.getLeft(), itemView.getTop(),
|
|
itemView.getLeft() + ((int) dX) + backgroundCornerOffset, itemView.getBottom());
|
|
} else if (dX < 0) { //swiping to the left
|
|
int iconLeft = itemView.getRight() - iconMargin - icon.getIntrinsicWidth();
|
|
int iconRight = itemView.getRight() - iconMargin;
|
|
icon.setBounds(iconLeft, iconTop, iconRight, iconButtom);
|
|
|
|
background.setBounds(itemView.getRight() + ((int) dX) - backgroundCornerOffset, itemView.getTop(),
|
|
itemView.getRight(), itemView.getBottom());
|
|
} else {
|
|
background.setBounds(0, 0, 0, 0);
|
|
}
|
|
background.draw(c);
|
|
icon.draw(c);
|
|
}
|
|
} |