Android: перевод (анимация) вида на изогнутый контур - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь анимировать вид по изогнутому пути, используя ObjectAnimator с Путь в качестве источника значений. Я использую arcTo , чтобы добавить изогнутый участок к Пути. Но по какой-то причине я не могу понять, представление просто не переводится на Android версии 7.1.1 (оно работает на Android 8). Он просто остается в своем первоначальном месте на экране.

Я пробовал несколько способов добавить изогнутый раздел в путь. arcTo , addArc и остальные методы изогнутого сечения. Но ни один из них не работает на Android 7.1.1.

Ниже приведены фрагменты кода, которые я использую

// creating path to animate along
val path = Path().apply {
    arcTo((pivot[0] - radius).toFloat(),
            (pivot[1] - radius).toFloat(),
            (pivot[0] + radius).toFloat(),
            (pivot[1] + radius).toFloat(),
            startAngle,
            sweepAngle,
            true)
}

// Animating the centre of view along the path
ObjectAnimator.ofFloat(startView, startView.centerXProperty(), startView.centerYProperty(), path).apply {
        duration = 2000
        interpolator = LinearInterpolator()
        start()
    }

// To animate center instead of Top Right Corner
fun View.centerXProperty() = object : Property<View, Float>(Float::class.java, "centerX") {
    override fun get(`object`: View?): Float {
        if (`object` == null) return 0.0f
        return `object`.x + (`object`.measuredWidth / 2)
    }

    override fun set(`object`: View?, value: Float?) {
        if (`object` == null || value == null) return
        val x = value - (measuredWidth / 2)
        `object`.x = x
    }
}

// To animate center instead of Top Right Corner
fun View.centerYProperty() = object : Property<View, Float>(Float::class.java, "centerY") {
    override fun get(`object`: View?): Float {
        if (`object` == null) return 0.0f
        return `object`.y + (`object`.measuredHeight / 2)
    }

    override fun set(`object`: View?, value: Float?) {
        if (`object` == null || value == null) return
        val y = value - (measuredHeight / 2)
        `object`.y = y
    }
}

Я в основном пытаюсь перевести вид по кругу, нарисованному вокруг сводного вида. Но это не работает на Android 7.1.1. Есть ли что-то, что я делаю не так. Пожалуйста, предложите, если есть лучший способ реализовать это. Заранее спасибо.

...