Удалить элемент при смахивании с закругленными углами - PullRequest
0 голосов
/ 26 марта 2020

У меня есть фрагмент, содержащий RecyclerView с предметами. Я уже реализовал функцию «смахивание для удаления», которая работает, как ожидалось. Тем не менее, элементы в моем RecyclerView имеют фон с закругленными углами, в то время как фон, который отображается за элементом при смахивании (со значком tra sh), не имеет закругленных углов (см. Скриншот). Может ли кто-нибудь помочь мне получить там закругленные углы? После некоторого повторного исследования я наткнулся на метод drawRoundRect для Canvas, однако мне понадобился бы такой метод для объекта ColorDrawable.

Вот код метода OnChildDraw ItemTouchHelper, где рисуется текущий фон:

public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {

    private RecyclerView.Adapter mAdapter;
    private Drawable icon;
    private final ColorDrawable background;
    private Context mContext;
    private Activity mActivity;
    private Fragment mFragment;


    @Override
    public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);

        View itemView = viewHolder.itemView;
        int backgroundCornerOffset = 20;

        int iconMargin = (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
        int iconTop = itemView.getTop() + (itemView.getHeight() - icon.getIntrinsicHeight()) / 2;
        int iconBottom = iconTop + icon.getIntrinsicHeight();

        if (dX < 0) { // Swiping to the left
            int iconLeft = itemView.getRight() - iconMargin - icon.getIntrinsicWidth();
            int iconRight = itemView.getRight() - iconMargin;
            icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);


            background.setBounds(itemView.getRight() + ((int) dX) - backgroundCornerOffset,
                    itemView.getTop(), itemView.getRight(), itemView.getBottom());


        } else { // view is unSwiped
            background.setBounds(0, 0, 0, 0);
        }
        background.draw(c);
        icon.draw(c);
    }
}

и некоторый код того, что я пытался использовать метод drawRoundRect, который не решил мою проблему:

RectF bg = new RectF(itemView.getRight() + ((int) dX) - backgroundCornerOffset,
                    itemView.getTop(), itemView.getRight(), itemView.getBottom());
            Paint p = new Paint();
            p.setColor(Color.parseColor("#0000FF"));
            c.drawRoundRect(bg, 20, 20, p);

enter image description here

1 Ответ

0 голосов
/ 26 марта 2020

Мне удалось решить мою проблему, используя GradientDrawable вместо ColorDrawable, который имеет метод setCornerRadius().

...