Как реализовать 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

→ Ссылка