diff --git a/testing/RecyclerItemTouchHelper.java b/testing/RecyclerItemTouchHelper.java new file mode 100644 index 0000000..07f4641 --- /dev/null +++ b/testing/RecyclerItemTouchHelper.java @@ -0,0 +1,118 @@ +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); + } +} \ No newline at end of file