package fragments import android.animation.Animator import android.animation.ValueAnimator import android.content.Context import android.media.MediaPlayer import android.os.Build import android.os.Bundle import android.os.VibrationEffect import android.os.Vibrator import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.Animation import android.view.animation.AnimationUtils import androidx.fragment.app.Fragment import com.example.sportscorefragments.R import kotlinx.android.synthetic.main.splash_fragment.* import kotlin.math.pow class SplashFragment : Fragment() { private var mp:MediaPlayer?=null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { // Inflate the layout for this fragment return inflater.inflate(R.layout.splash_fragment, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mp = MediaPlayer.create(this.getContext(),R.raw.hitball_2) val animation = AnimationUtils.loadAnimation(this.getContext(), R.anim.fade_in) //load brand animation animation.setAnimationListener(object : Animation.AnimationListener { override fun onAnimationRepeat(animation: Animation?) {} override fun onAnimationEnd(animation: Animation?) { parabolic_1() //call second parabolic movement } override fun onAnimationStart(animation: Animation?) {} }) this.textView.startAnimation(animation) //start brand animation } private fun parabolic_1() { this.tennisBall.visibility = View.VISIBLE var width = super.getView()!!.width val animator = ValueAnimator.ofFloat(0f,width*0.4f) animator.duration = 700 animator.addUpdateListener ( object: ValueAnimator.AnimatorUpdateListener{ override fun onAnimationUpdate(animation: ValueAnimator?) { moveBall_1(animation?.animatedValue as Float) } }) animator.addListener ( object: Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationEnd(animation: Animator?) { playSound() vibratePhone() parabolic_2() //call second parabolic move } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} }) animator.start() //start logo animation } private fun parabolic_2() { var width = super.getView()!!.width val animator = ValueAnimator.ofFloat(width*0.4f,width*0.8f) animator.duration = 700 animator.addUpdateListener ( object: ValueAnimator.AnimatorUpdateListener{ override fun onAnimationUpdate(animation: ValueAnimator?) { moveBall_2(animation?.animatedValue as Float) } }) animator.addListener ( object: Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationEnd(animation: Animator?) { playSound() vibratePhone() parabolic_3() //call third parabolic move } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} }) animator.start() //start logo animation } private fun parabolic_3() { var width = super.getView()!!.width val animator = ValueAnimator.ofFloat(width*0.8f, width*1f) animator.duration = 700 animator.addUpdateListener ( object: ValueAnimator.AnimatorUpdateListener{ override fun onAnimationUpdate(animation: ValueAnimator?) { moveBall_3(animation?.animatedValue as Float) } }) animator.addListener ( object: Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationEnd(animation: Animator?) { playSound() vibratePhone() parabolic_4() //call third parabolic move } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} }) animator.start() //start logo animation } private fun parabolic_4() { var width = super.getView()!!.width val animator = ValueAnimator.ofFloat(width*1f, width*0.6f) animator.duration = 700 animator.addUpdateListener ( object: ValueAnimator.AnimatorUpdateListener{ override fun onAnimationUpdate(animation: ValueAnimator?) { moveBall_4(animation?.animatedValue as Float) } }) animator.addListener ( object: Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationEnd(animation: Animator?) { playSound() vibratePhone() //Todo call next screen //call next screen } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} }) animator.start() //start logo animation } private fun playSound() { mp?.stop() mp?.prepare() mp?.start() } private fun moveBall_1(x : Float) { var W = super.getView()!!.width var H = super.getView()!!.height var a = (0.3*H)/((0.4*W).pow(2)) var y = a*(x.pow(2))+(0.1*H) this.tennisBall.translationY = y.toFloat() this.tennisBall.translationX = x.toFloat() } private fun moveBall_2(x : Float) { var W = super.getView()!!.width var H = super.getView()!!.height var a = (0.15*H)/((0.2*W).pow(2)) var y = a*((x-0.6*W).pow(2))+(0.25*H) this.tennisBall.translationY = y.toFloat() this.tennisBall.translationX = x.toFloat() } private fun moveBall_3(x : Float) { var W = super.getView()!!.width var H = super.getView()!!.height var a = (0.075*H)/((0.2*W-50).pow(2)) var y = a*((x-(W-50)).pow(2))+(0.325*H) this.tennisBall.translationY = y.toFloat() this.tennisBall.translationX = x.toFloat() } private fun moveBall_4(x : Float) { var W = super.getView()!!.width var H = super.getView()!!.height var a = (0.3*H)/((0.4*W).pow(2)) var y = a*((x-W).pow(2))+(0.1*H) this.tennisBall.translationY = y.toFloat() this.tennisBall.translationX = x.toFloat() println("Y4 " + y) } private fun vibratePhone(){ val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator if (Build.VERSION.SDK_INT>=26){ vibrator.vibrate(VibrationEffect.createOneShot(200,VibrationEffect.DEFAULT_AMPLITUDE)) }else{ vibrator.vibrate(200) } } }