1 package com.airbnb.lottie.samples 2 3 import android.graphics.PointF 4 import android.os.Bundle 5 import android.view.View 6 import androidx.appcompat.app.AppCompatActivity 7 import androidx.customview.widget.ViewDragHelper 8 import com.airbnb.lottie.LottieProperty 9 import com.airbnb.lottie.model.KeyPath 10 import com.airbnb.lottie.samples.databinding.BullseyeActivityBinding 11 import com.airbnb.lottie.samples.utils.viewBinding 12 import com.airbnb.lottie.value.LottieRelativePointValueCallback 13 14 class BullseyeActivity : AppCompatActivity() { 15 private val binding: BullseyeActivityBinding by viewBinding() 16 onCreatenull17 override fun onCreate(savedInstanceState: Bundle?) { 18 super.onCreate(savedInstanceState) 19 20 val largeValueCallback = LottieRelativePointValueCallback(PointF(0f, 0f)) 21 binding.animationView.addValueCallback(KeyPath("First"), LottieProperty.TRANSFORM_POSITION, largeValueCallback) 22 23 val mediumValueCallback = LottieRelativePointValueCallback(PointF(0f, 0f)) 24 binding.animationView.addValueCallback(KeyPath("Fourth"), LottieProperty.TRANSFORM_POSITION, mediumValueCallback) 25 26 val smallValueCallback = LottieRelativePointValueCallback(PointF(0f, 0f)) 27 binding.animationView.addValueCallback(KeyPath("Seventh"), LottieProperty.TRANSFORM_POSITION, smallValueCallback) 28 29 var totalDx = 0f 30 var totalDy = 0f 31 32 val viewDragHelper = ViewDragHelper.create(binding.containerView, object : ViewDragHelper.Callback() { 33 override fun tryCaptureView(child: View, pointerId: Int) = child == binding.targetView 34 35 override fun clampViewPositionVertical(child: View, top: Int, dy: Int): Int { 36 return top 37 } 38 39 override fun clampViewPositionHorizontal(child: View, left: Int, dx: Int): Int { 40 return left 41 } 42 43 override fun onViewPositionChanged(changedView: View, left: Int, top: Int, dx: Int, dy: Int) { 44 totalDx += dx 45 totalDy += dy 46 smallValueCallback.setValue(getPoint(totalDx, totalDy, 1.2f)) 47 mediumValueCallback.setValue(getPoint(totalDx, totalDy, 1f)) 48 largeValueCallback.setValue(getPoint(totalDx, totalDy, 0.75f)) 49 } 50 }) 51 52 binding.containerView.viewDragHelper = viewDragHelper 53 } 54 getPointnull55 private fun getPoint(dx: Float, dy: Float, factor: Float) = PointF(dx * factor, dy * factor) 56 }