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); } }