Для тех кто не знает, что такое свайп:
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));
Пример того, что можно сделать: