es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadir resistencia al arrastre a MotionEvent al mover hacia arriba.

Estoy utilizando MotionEvent.ACTION_MOVE para arrastrar una vista hacia arriba o hacia abajo en el eje y. El arrastre funciona perfectamente, sin embargo, me gustaría agregar algo de “resistencia” cuando el arrastre sea hacia ARRIBA.

Aquí está mi progreso hasta ahora.

MotionEvent.ACTION_DOWN -> {

    downYValue = event.y

    rightDY = viewToDrag!!.y - event.rawY
}
MotionEvent.ACTION_MOVE -> {

    val displacement = ((event.rawY) + rightDY)

    println("DISPLACEMENT $displacement")

    val currentY = event.y
    if (downYValue > currentY) {
        println("up")
    }

    viewToDrag!!.animate().y(displacement).setDuration(0).start()
}

Cuando se arrastra la vista hacia arriba o hacia abajo, la velocidad del arrastre es la misma que la velocidad del dedo.

Me gustaría que la velocidad del arrastre hacia ARRIBA fuera mucho más lenta que la velocidad del dedo. Lo más cercano que llegué fue detectando “arriba”.

¿Cómo puedo agregar resistencia a la velocidad de arrastre hacia ARRIBA?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una manera de lograr resistencia al arrastrar la vista hacia arriba es agregando un factor de amortiguación al cálculo del desplazamiento. Puede modificar el código en la sección MotionEvent.ACTION_MOVE de la siguiente manera:

    val desplazamiento = (event.rawY + rightDY)
    
    val currentY = event.y
    if (downYValue > currentY) {
        // aplicar resistencia al arrastrar hacia arriba
        val factorAmortiguación = 0.5f // ajuste este factor para controlar la resistencia
        val distanciaArrastrada = downYValue - currentY
        desplazamiento -= (factorAmortiguación * distanciaArrastrada)
    }
    
    viewToDrag!!.animate().y(desplazamiento).setDuration(0).start()
    

    En esta modificación, primero calculamos la distancia arrastrada restando el valor actual de y del valor inicial de y. Luego, aplicamos el factor de amortiguación a esta distancia para reducir la velocidad del arrastre. Finalmente, restamos la distancia amortiguada del valor de desplazamiento para obtener la posición final donde se debe arrastrar la vista.

    Puede ajustar el valor del factor de amortiguación para controlar cuánto amortiguamiento se aplica al arrastre hacia arriba. Cuanto mayor sea el factor, más resistencia se aplicará y más lento será el arrastre.

Comments are closed.