Для тех кто не знает, что такое свайп:
Swype (изм. от англ. swipe — проводить не отрывая, скользить + type — печатать текст) — торговая марка, используемая компанией Swype Inc. для обозначения способа ввода текста не отрывая палец/стилус от «кнопок клавиатуры» на сенсорном экране.
Допустим у вас есть необходимость отслеживать свайп по элементам списка в приложение и при определенных условиях (например свайп справа налево) удалять файл. Для этого можно использовать этот класс.
import android.app.Activity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**
* @author fonclub <sfonclub@gmail.com>
* @created 06.04.2017.
*/
public class SwipeTouchListener implements View.OnTouchListener {
private static final String LOG_TAG = "SwipeTouchListener";
private Activity activity;
private static int MIN_DISTANCE;
private float downX;
private float downY;
public SwipeTouchListener(Activity _activity) {
activity = _activity;
DisplayMetrics dm = activity.getResources().getDisplayMetrics();
MIN_DISTANCE = (int) (120.0f * dm.densityDpi / 160.0f + 0.5);
}
private void onRightToLeftSwipe() {
Log.i(LOG_TAG, "Справа налево!");
}
private void onLeftToRightSwipe() {
Log.i(LOG_TAG, "Слева направо!");
// удаляем файл или делаем любое действие с активити
activity.deleteFile("file");
}
private void onTopToBottomSwipe() {
Log.i(LOG_TAG, "Сверху вниз!");
}
private void onBottomToTopSwipe() {
Log.i(LOG_TAG, "Снизу вверх!");
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
return true;
}
case MotionEvent.ACTION_UP: {
float upX = event.getX();
float upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// горизонтальный свайп
if (Math.abs(deltaX) > MIN_DISTANCE) { // если дистанция не меньше минимальной
// слева направо
if (deltaX < 0) {
this.onLeftToRightSwipe();
return true;
}
//справа налево
if (deltaX > 0) {
this.onRightToLeftSwipe();
return true;
}
}
// вертикальный свайп
if (Math.abs(deltaY) > MIN_DISTANCE) { //если дистанция не меньше минимальной
// сверху вниз
if (deltaY < 0) {
this.onTopToBottomSwipe();
return true;
}
// снизу вверх
if (deltaY > 0) {
this.onBottomToTopSwipe();
return true;
}
}
return false;
}
}
return false;
}
}
А в самой активити привязать обработчик к какому-то layout, например LinearLayout:
LinearLayout linear = (LinearLayout) activity.findViewById(R.id.itemList); linear.setOnTouchListener(new SwipeTouchListener(activity));
Пример того, что можно сделать: