Просмотр перемещения наверх после удаления правила относительного отступления в Android - PullRequest
0 голосов
/ 20 ноября 2018

Я добавил RelativeLayout в RelativeLayout, используя приведенный ниже код.

var _root: ViewGroup? = null
private var _xDelta: Float = 0F
private var _yDelta: Float = 0F

lateinit var layoutParams: RelativeLayout.LayoutParams

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_add)

    _root = findViewById(R.id.root)

    _view = RelativeLayout(this)
    _view?.setBackgroundColor(Color.BLUE)

    layoutParams = RelativeLayout.LayoutParams(280, 280)
    layoutParams.leftMargin = 0
    layoutParams.topMargin = 0
    layoutParams.bottomMargin = 0
    layoutParams.rightMargin = 0

    // Adding Rule
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)

    _view?.layoutParams = layoutParams

    _view?.setOnTouchListener(this)
    _root?.addView(_view)

}

Если я коснусь вида и переместлю палец, он переместится в вид, следуя за моим пальцем.Ниже приведен код для этого: -

override fun onTouch(view: View, event: MotionEvent): Boolean {
    val X = event.rawX
    val Y = event.rawY
    when (event.action and MotionEvent.ACTION_MASK) {
        MotionEvent.ACTION_DOWN -> {
            val lParams = view.layoutParams as RelativeLayout.LayoutParams
            _xDelta = X - lParams.leftMargin
            _yDelta = Y - lParams.topMargin
        }
        MotionEvent.ACTION_UP -> {
        }
        MotionEvent.ACTION_POINTER_DOWN -> {
        }
        MotionEvent.ACTION_POINTER_UP -> {
        }
        MotionEvent.ACTION_MOVE -> {

            // Removing the rule to apply the effects
            layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
            layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT)

            layoutParams = view.layoutParams as RelativeLayout.LayoutParams
            layoutParams.leftMargin = (X - _xDelta).toInt()
            layoutParams.topMargin = (Y - _yDelta).toInt()
            layoutParams.rightMargin = 0
            layoutParams.bottomMargin = 0

            view.layoutParams = layoutParams

        }
    }
    _root?.invalidate()
    return true
}

Но когда я касаюсь вида, он перемещается в верхний левый угол.Я хочу, чтобы это было только в моей области касания пальца.Он работает нормально после того, как я снова коснусь.Есть ли какое-нибудь решение?Пожалуйста, помогите.

...