Не отображается иконка при свайпе CardView

151
28 июля 2019, 04:00

При свайпе вправо не отображается иконка, хотя при свайпе влево она есть. Я смог пофиксить это, деля итоговое число на 10, но иконка получается слишком близко к краю и сплюснутая. Как мне отрисовывать иконку?

Функция с отрисовыванием

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
    if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){
        View itemView = viewHolder.itemView;
        int backgroundCornerOffset = 20; //so background is behind the rounded corners of itemView
        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 right
            background = new ColorDrawable(GREEN);
            int iconLeft =(itemView.getLeft() + iconMargin + icon.getIntrinsicWidth()) / 10;
            int iconRight = itemView.getLeft() + iconMargin;
            icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
            background.setBounds(itemView.getLeft(), itemView.getTop(), itemView.getLeft() + ((int) dX) + backgroundCornerOffset, itemView.getBottom());
        } else if (dX < 0) { // Swiping to the left
            background = new ColorDrawable(Color.RED);
            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);
    }
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}

Весь класс

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
import android.widget.Toast;
public class SwipeCallback extends ItemTouchHelper.SimpleCallback {
    private ObjectRemovable  mAdapter;
    private Drawable icon;
    private Context context;
    private ColorDrawable background;
    private int GREEN;
    public SwipeCallback(ObjectRemovable  adapter, Context context) {
        super(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
        mAdapter = adapter;
        icon = ContextCompat.getDrawable(context, R.drawable.delete_trash);
        background = new ColorDrawable(Color.WHITE);
        GREEN = context.getResources().getColor(R.color.green);
        this.context = context;
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
        return false;
    }
    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        int position = viewHolder.getAdapterPosition();
        if(direction == ItemTouchHelper.LEFT) {
            mAdapter.removeObject(position);
        }
        else if (direction == ItemTouchHelper.RIGHT){
            Toast.makeText(context,"Swipe to right",Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){
            View itemView = viewHolder.itemView;
            int backgroundCornerOffset = 20; //so background is behind the rounded corners of itemView
            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 right
                background = new ColorDrawable(GREEN);
                int iconLeft =(itemView.getLeft() + iconMargin + icon.getIntrinsicWidth()) / 10;
                int iconRight = itemView.getLeft() + iconMargin;
                icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
                background.setBounds(itemView.getLeft(), itemView.getTop(), itemView.getLeft() + ((int) dX) + backgroundCornerOffset, itemView.getBottom());
            } else if (dX < 0) { // Swiping to the left
                background = new ColorDrawable(Color.RED);
                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);
        }
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
    }
    public interface ObjectRemovable {
        void removeObject(int position);
    }
}
READ ALSO
gradle сборка зависимостей отдельно

gradle сборка зависимостей отдельно

Есть проект, который использует много библиотекЯ хочу передавать его на другой ПК после каждого обновления

156
Актуальность аплетов

Актуальность аплетов

В книге Шилда "Java 8 для начинающих" пару раз разбирается создание аплетов разными средствамиРазве сейчас, эти аплеты не вытеснены JavaScript'ом?...

148
Как правильно нарисовать на Jpanel?

Как правильно нарисовать на Jpanel?

у меня есть главное окно(MainFrame), где меню, таблица и тд, и есть свободное место, куда размещено пустой JPANEL(MainDrawPanel), я хочу туда нарисовать фигуры

169
Java EE (Jakarta EE) сервера приложений, в чём разница?

Java EE (Jakarta EE) сервера приложений, в чём разница?

Я люблю и обожаю Java, использовал спринг, испрользовал много чего еще, но так вышло что Java EE (Jakarta EE) меня обошел стороной, но сейчас я решил попробовать

140