#android #kotlin
Вопрос:
Итак, у меня есть путь, и я хочу перетащить свое представление по этому пути вертикально. это мой onTouchListener
код для представления:
val point = FloatArray(2)
val pathMeasure = PathMeasure(path, true)
tooltipView.setOnTouchListener(object :View.OnTouchListener{
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
onDataPointTouchListener()
if (event?.action == MotionEvent.ACTION_MOVE){
v?.performClick()
pathMeasure.getPosTan(event.x, point, null) // This is where I get path point
v?.x = point[0] - tooltipWith / 2
v?.y = point[1] - tooltipHeight
}else if (event?.action == MotionEvent.ACTION_UP){
tooltipView.animate().translationX(previousX - tooltipWith / 2)
tooltipView.animate().translationY(previousY - tooltipHeight)
layoutDate.visible()
}
return true
}
})
Может кто-нибудь, пожалуйста, помочь мне. Мой путь — изогнутая линия. Я хочу иметь возможность перетащить представление в эту строку.Так же, как панель поиска:
Ответ №1:
То, что вы пытаетесь сделать, несколько сложно и зависит от того, какие короткие пути вы готовы пойти.
Самое простое, что я могу придумать, это: используйте PathMeasure, чтобы пройти по пути и решить, к какой точке пути ближе всего ваш палец (петля по всему пути по сравнению с event.x/y ). Переместите позицию в эту точку. Это не так гладко, как на панели поиска. Который анимируется на ваш палец.
Комментарии:
1. Спасибо. Я решаю проблему другими способами. но ваше описание совершенно верно.
Ответ №2:
Гораздо проще использовать MotionLayout (библиотека компоновки ограничений 2) — вам нужно только установить XML-файл с 2 наборами ограничений, а библиотека обрабатывает остальные.
Вы также можете добавить координаты пути в определенное время, и библиотека создаст интерполяцию пути.
Рекомендации:
Комментарии:
1. Спасибо. но я использую пользовательский макет. Это диаграмма, которую я хочу, чтобы пользователь мог перетаскивать подсказку с помощью касания.
2. О, я понимаю, извини. Вы хотите, чтобы анимация пути начиналась, как только пользователь отпустит перетаскивание?
3. Нет. Я обновил вопрос. пожалуйста, взгляните
4. Для меня это звучит как вариант использования макета движения, если только у вас нет xml-файла макета
5. ДА. У меня нет layout.xml.