SwipeCard представляет собой элемент пользовательского интерфейса Android, который позволяет пользователю перетаскивать элементы интерфейса на экране с помощью жестов swipe. Работа с SwipeCard включает в себя создание обработчиков для событий связанных с жестами swipe, управление перемещением элементов интерфейса и обработку действий, совершаемых при перетаскивании элемента.
Для начала работы с SwipeCard необходимо добавить его в макет активности или фрагмента в XML файле разметки:
<android.support.v7.widget.CardView android:id="@+id/swipe_card" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Здесь может быть ваш контент, например, ImageView или TextView --> </android.support.v7.widget.CardView>
После этого в коде активности или фрагмента нужно получить ссылку на SwipeCard:
val swipeCard: CardView = findViewById(R.id.swipe_card)
Далее можно добавить обработчики событий связанных с swipe-действиями. Например, чтобы реагировать на свайп вправо и влево, можно использовать классы GestureDetector и OnGestureListener:
val gestureDetector = GestureDetector(this, object : SimpleOnGestureListener() { override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean { val distanceX = e2.x - e1.x val distanceY = e2.y - e1.y if (distanceX > 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп вправо return true } else if (distanceX < 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп влево return true } return false } })
Затем нужно добавить обработчик нажатий на SwipeCard и прикрепить к нему ранее созданный GestureDetector:
swipeCard.setOnTouchListener { view, event -> gestureDetector.onTouchEvent(event) }
Теперь для перетаскивания элемента SwipeCard можно использовать свайпы вправо и влево. Остается только добавить логику для перемещения элемента интерфейса и обработки действий при перемещении. Например, можно использовать метод scrollBy() для сдвига элемента:
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean { val distanceX = e2.x - e1.x val distanceY = e2.y - e1.y if (distanceX > 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп вправо swipeCard.scrollBy(distanceX.toInt(), 0) return true } else if (distanceX < 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп влево swipeCard.scrollBy(distanceX.toInt(), 0) return true } return false }
Также можно добавить обработку событий, возникающих при достижении определенной позиции при перетаскивании элемента, например, с помощью метода scrollTo():
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean { val distanceX = e2.x - e1.x val distanceY = e2.y - e1.y if (distanceX > 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп вправо swipeCard.scrollBy(distanceX.toInt(), 0) if (swipeCard.scrollX >= THRESHOLD) { swipeCard.scrollTo(THRESHOLD, 0) // Выполнить действие при достижении пороговой позиции справа } return true } else if (distanceX < 0 && Math.abs(distanceX) > Math.abs(distanceY)) { // Свайп влево swipeCard.scrollBy(distanceX.toInt(), 0) if (swipeCard.scrollX <= -THRESHOLD) { swipeCard.scrollTo(-THRESHOLD, 0) // Выполнить действие при достижении пороговой позиции слева } return true } return false }
Таким образом, работа с SwipeCard включает добавление его в макет разметки XML, создание обработчиков событий связанных со свайпом, управление перемещением элемента интерфейса и обработку действий при перетаскивании.