CircularDeletionSwipe

Cette page référence le projet CircularDeletionSwipe et vous montre comment l’utiliser.

Pour utiliser la librairie vous avez besoin de posséder certains fichiers, allez-y étape par étape /!\ C’est très important /!\


Créez un fichier XML dans le dossier drawable-xhdpi nommé ic_delete_24dp.xml

main/res/drawable-xhdpi/ic_delete_24dp.xml

<vector

xmlns:android="http://schemas.android.com/apk/res/android"

android:width="24dp"

android:height="24dp"

android:viewportWidth="24"

android:viewportHeight="24">


<path

android:fillColor="@color/grey"

android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>


</vector>

Créez un fichier XML dans le dossier drawable-xhdpi nommé ic_delete_alt_24dp.xml

main/res/drawable-xhdpi/ic_delete_alt_24dp.xml

<vector

xmlns:android="http://schemas.android.com/apk/res/android"

android:width="24dp"

android:height="24dp"

android:viewportWidth="24"

android:viewportHeight="24">


<path

android:fillColor="@color/white"

android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>


</vector>

Créez un fichier XML dans le dossier values nommé dimens.xml

main/res/values/dimens.xml

<resources>


<dimenname="padding_normal">16dp</dimen>

<dimenname="padding_small">8dp</dimen>


</resources>

Créez un fichier XML dans le dossier values nommé colors.xml

main/res/values/colors.xml

<resources>


<colorname="background_light">#FFFAFAFA</color>

<colorname="background_deletion">#FFE5E5E5</color>

<colorname="background_deletion_swipe">#FFF44336</color>

<colorname="white">#FFFFFFFF</color>

<colorname="semi_black">#87000000</color>

<colorname="grey">#FF828282</color>


</resources>

Créez un fichier JAVA dans le dossier helpers nommé DeletionSwipeHelper.java

main/java/com/your/library/helpers/DeletionSwipeHelper.java

import com.your.library.R;


import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.RecyclerView.ViewHolder;

import android.support.v7.widget.helper.ItemTouchHelper;


import android.support.v4.content.ContextCompat;


import android.content.Context;

import android.content.res.Resources;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.LinearGradient;

import android.graphics.Paint;

import android.graphics.PorterDuff;

import android.graphics.PorterDuffColorFilter;

import android.graphics.Shader.TileMode;

import android.graphics.drawable.Drawable;


public class DeletionSwipeHelper extends ItemTouchHelper.SimpleCallback

{

private OnSwipeListener listener;

private Context context;

private int backgroundColor;

private int deleteColor;

private int iconPadding;

private Drawable deleteIcon = null;

private Paint circlePaint = null;


public static float CIRCLE_ACCELERATION = 3;


public DeletionSwipeHelper(int dragDirsint swipeDirs, Context context, OnSwipeListener listener)

{

super(dragDirs, swipeDirs);


this.context = context;

this.listener = listener;


Resources res = context.getResources();


backgroundColor = ContextCompat.getColor(context, R.color.background_deletion);

deleteColor = ContextCompat.getColor(context, R.color.background_deletion_swipe);


iconPadding = res.getDimensionPixelSize(R.dimen.padding_normal);

}


@Override

public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target

{

return true;

}


@Override

public void onSwiped(RecyclerView.ViewHolder viewHolderint direction

{

listener.onSwiped(viewHolder, viewHolder.getAdapterPosition());

}


@Override

public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)

{

return makeMovementFlags(0, ItemTouchHelper.START);

}


@Override

public float getSwipeEscapeVelocity(float defaultValue)

{

float values = defaultValue * 5f;


return values;

}


@Override

public boolean isLongPressDragEnabled()

{

return false;

}


@Override

public void onChildDraw(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolderfloat dXfloat dYint actionStateboolean isCurrentlyActive)

{

if (dX == 0f

{

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


return;

}


float left = viewHolder.itemView.getLeft();

float top = viewHolder.itemView.getTop();

float right = viewHolder.itemView.getRight();

float bottom = viewHolder.itemView.getBottom();

float width = right - left;

float height = bottom - top;

float saveCount = canvas.save();


canvas.clipRect(right + dX, top, right, bottom);

canvas.drawColor(backgroundColor);


deleteIcon = ContextCompat.getDrawable(context, R.drawable.ic_delete_24dp);

circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);


circlePaint.setColor(deleteColor);


float progress =-dX / width;

float swipeThreshold = getSwipeThreshold(viewHolder);

float opacity = 1f;

float iconScale = 1f;

float circleRadius = 0f;


circleRadius = (progress - swipeThreshold) * width * CIRCLE_ACCELERATION;


if (deleteIcon != null)

{

float cx = right  iconPadding - deleteIcon.getIntrinsicWidth() / 2f;

float cy = top + height / 2f;

float halfIconSize = deleteIcon.getIntrinsicWidth() * iconScale / 2f;


deleteIcon.setBounds((int)(cx - halfIconSize), (int)(cy - halfIconSize), (int)(cx + halfIconSize), (int)(cy + halfIconSize));

deleteIcon.setAlpha(Math.round(opacity * 255f));

deleteIcon.setColorFilter(new PorterDuffColorFilter(ContextCompat.getColor(context, R.color.grey), PorterDuff.Mode.SRC_IN));


if (circleRadius > 0f)

{

canvas.drawCircle(cx, cy, circleRadius, circlePaint);


deleteIcon.setColorFilter(new PorterDuffColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP));

}


deleteIcon.draw(canvas);

}


canvas.restoreToCount(Math.round(saveCount));


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

}


public interface OnSwipeListener

{

void onSwiped(RecyclerView.ViewHolder viewHolderint position);

}

}

www.000webhost.com