• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }