Andrioid Проведите пальцем вверх, чтобы снять, не разрезая вид снаружи. - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь провести пальцем вверх, чтобы отклонить элемент утилита просмотра, который работает нормально с кодом ниже, используя ItemTouchHelper.Callback. Проблема в том, что, если я проведу пальцем вверх, то вид элемента не будет перетаскиваться за пределы окна просмотра.

Для более подробного объяснения рассмотрите это изображение.

enter image description here

  @Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
    return makeMovementFlags(0, ItemTouchHelper.UP);
}

@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
    return false;
}

@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 itemHeight = itemView.getHeight();

    boolean isCancelled = dY == 0 && !isCurrentlyActive;

    if (isCancelled) {
        clearCanvas(c, (float)itemView.getRight(), (float) itemView.getTop() + dY, (float) itemView.getRight(), (float) itemView.getBottom());
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        return;
    }

    mBackground.setColor(backgroundColor);
    mBackground.setBounds(itemView.getRight(), itemView.getTop() + (int) dY, itemView.getRight(), itemView.getBottom());
    mBackground.draw(c);

    int deleteIconTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2;
    int deleteIconMargin = (itemHeight - intrinsicHeight) / 2;
    int deleteIconLeft = itemView.getRight() - deleteIconMargin - intrinsicWidth;
    int deleteIconRight = itemView.getRight() - deleteIconMargin;
    int deleteIconBottom = deleteIconTop + intrinsicHeight;


    deleteDrawable.setBounds(deleteIconLeft, deleteIconTop, deleteIconRight, deleteIconBottom);
    deleteDrawable.draw(c);

    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);


}

private void clearCanvas(Canvas c, Float left, Float top, Float right, Float bottom) {
    c.drawRect(left, top, right, bottom, mClearPaint);

}

@Override
public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {
    return 0.7f;
}
...