• API
• FAQ
• Tools
• Archive
daily pastebin goal
7%
SHARE
TWEET

# Untitled

a guest Jan 17th, 2019 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. class Animator(
2.         private val animations: List<Animation>
3. ) {
4.     constructor(view: View,
5.                 startPoint: Point2D = Point2D(view.x, view.y),
6.                 endPoint: Point2D) : this(listOf(Animation(view, startPoint, endPoint)))
7.
8.     private val transitionState: TransitionState = TransitionState(0)
9.     private val animationQueue: Handler = Handler()
10.
11.     /**
12.      * Apply a progression in the animation from [startPoint] to [endPoint] or conversely depending
13.      * on the transition state.
14.      * When the [TransitionState.progress] reach 0 the position of the [view] to animate is at [startPoint]. When it
15.      * reach 100 the view will be at the [endPoint]
16.      *
17.      * @param percent   an Integer that must be between 0 and 100 because it's percentage. If the
18.      *                  given percent is below 0 it
19.      *                  will override it to 0. Same process when it's over 100.
20.      */
21.     fun progressTo(percent: Int) {
22.         for (anim in animations) {
23.             val finalPercent = if (percent > 100) 100 else if (percent < 0) 0 else percent
24.             if (Math.abs(transitionState.progress - finalPercent) < 10) {
25.                 animationQueue.post {
26.                     anim.view.x = (Vector2D(anim.startPoint, anim.endPoint) % finalPercent).endPoint.x
27.                     anim.view.y = (Vector2D(anim.startPoint, anim.endPoint) % finalPercent).endPoint.y
28.                 }
29.             } else {
30.                 anim.view.animate().x((Vector2D(anim.startPoint, anim.endPoint) % finalPercent).endPoint.x)
31.                 anim.view.animate().y((Vector2D(anim.startPoint, anim.endPoint) % finalPercent).endPoint.y)
32.             }
33.             transitionState.progress = finalPercent
34.         }
35.     }
36.
37.     /**
38.      * Finish the animation to the endPoint or startPoint depending on the [TransitionState.progress]
39.      */
40.     fun finishAnimation() {
41.         if (transitionState.progress < 50) {
42.             progressTo(0)
43.         } else if (transitionState.progress >= 50) {
44.             progressTo(100)
45.         }
46.     }
47. }
48.
49. data class TransitionState(
50.         var progress: Int,
51.         var isOnTransaction: Boolean = progress != 0 && progress != 100
52. )
53.
54. data class Vector2D(
55.         val startPoint: Point2D,
56.         val endPoint: Point2D
57. ) {
58.     operator fun rem(percent: Int): Vector2D {
59.         val finalPercent = if (percent > 100) 100 else if (percent < 0) 0 else percent
60.         return Vector2D(startPoint, Point2D(
61.                 startPoint.x + ((endPoint.x - startPoint.x) * finalPercent / 100),
62.                 startPoint.y + ((endPoint.y - startPoint.y) * finalPercent / 100)
63.         ))
64.     }
65. }
66.
67. data class Animation(
68.         val view: View,
69.         val startPoint: Point2D = Point2D(view.x, view.y),
70.         val endPoint: Point2D
71. )
72.
73. data class Point2D(
74.         val x: Float,
75.         val y: Float
76. )
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top