Как реализовать ScrollView с другими объектами?
Мне надо сделать ScrollView, в котором располагается LinearLayout и внутри него бы лежали другие объекты, которые можно было бы из него перетаскивать и перемещать их по всему экрану и при этом можно было нормально просматривать ScrollView. Пробовал делать через MotionEvent не получилось.
override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
val piece = view as PuzzlePiece
val moveX = motionEvent.rawX
val moveY = motionEvent.rawY
val lin = piece.parent as LinearLayout
val scroll = lin.parent as HorizontalScrollView
when (motionEvent.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_DOWN -> {
val parent = view.parent as ViewGroup
val left = (view.x).toInt()
val top = (view.y).toInt()
val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT)
val scroll = (view.parent as LinearLayout).parent as HorizontalScrollView
parent.removeView(view)
params.setMargins(left, top, 0, 0)
view.layoutParams = params
layout.addView(view)
xDelta = moveX - params.leftMargin
yDelta = moveY - params.topMargin
piece.inScroll = false
view.post {
storage.heightList[pieces.indexOf(piece)] = view.bottom
}
}
MotionEvent.ACTION_MOVE -> {
val lParams = view.getLayoutParams() as RelativeLayout.LayoutParams
lParams.leftMargin = (moveX - xDelta).toInt()
lParams.topMargin = (moveY - yDelta).toInt()
if (lParams.leftMargin >= width - piece.width) {
lParams.leftMargin = width - piece.width
}
if (lParams.topMargin >= height - piece.pieceHeight) {
lParams.topMargin = height - piece.pieceHeight
}
if (lParams.leftMargin <= 0 - piece.offsetX / 2) {
lParams.leftMargin = 0 - piece.offsetX / 2
}
if (lParams.topMargin <= 0 - piece.offsetY / 2) {
lParams.topMargin = 0 - piece.offsetY / 2
}
view.setLayoutParams(lParams)
}
MotionEvent.ACTION_UP ->{
view.setOnTouchListener(TouchListener(context, pieces, activity, settings, pos, height, width, image, storage, name))
}
}
return true
Ответы (1 шт):
Автор решения: Ivan
→ Ссылка
Нашёл способ по перетаскиванию объектов с помощью Drag and Drop, он позволяет перетаскивать объекты по всему экрану активности. Стоит учитывать, что, чтобы сбросить объект на другой Layout, он должен быть связан с родителем объекта. За подробностями обращайтесь к документации от Google. https://developer.android.com/guide/topics/ui/drag-drop