美文网首页
2023-07-14

2023-07-14

作者: 努力不负青春 | 来源:发表于2023-07-13 00:32 被阅读0次
    
        val line: ImageView
        val fp: FPGradientView
        val fp2: FPGradientView
        private var distance = 0f
    
        val animationSet1 = AnimationSet(true)
        val animationSet2 = AnimationSet(true)
    
    
    
        init {
            View.inflate(context, R.layout.layout_fingerprint, this)
            line = findViewById(R.id.line)
            fp = findViewById(R.id.fp)
            fp2 = findViewById(R.id.fp2)
            fp.isup = true
            fp2.isup = false
    
            line.startAnimation(animationSet1)
            fp.start()
            resetAnim()
        }
    
        override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
            super.onSizeChanged(w, h, oldw, oldh)
            distance = h * 0.63f
    
            fp.setDistance(distance)
            fp.setRadius(h * 0.6f * 48 / 100)
            fp.setWidth(w / 1f)
            fp.setMHeight(h / 4f)
            fp.setNHeight(h / 1f)
    
            fp2.setDistance(distance)
            fp2.setRadius(h * 0.6f * 48 / 100)
            fp2.setWidth(w / 1f)
            fp2.setMHeight(h / 4f)
            fp2.setNHeight(h / 1f)
    
            val alphaAnimation1 = AlphaAnimation(0f, 1.0f)
            alphaAnimation1.duration = 500
    
            val alphaAnimation2 = AlphaAnimation(1.0f, 0f)
            alphaAnimation2.duration = 500
            alphaAnimation2.startOffset = 500
    
    
            val translateAnimation1 = TranslateAnimation(
                line.x, //x轴起始位置
                line.x, //x轴最终位置
                line.y, //y轴起始位置
                line.y + distance //y轴最终位置
            )
            translateAnimation1.duration = 1000 //移动持续1秒
            translateAnimation1.interpolator = LinearInterpolator()
    
            val translateAnimation2 = TranslateAnimation(
                line.x, //x轴起始位置
                line.x, //x轴最终位置
                line.y + distance, //y轴起始位置
                line.y  //y轴最终位置
            )
            translateAnimation2.duration = 1000 //移动持续1秒
            translateAnimation2.interpolator = LinearInterpolator()
    
            animationSet1.apply {
                addAnimation(alphaAnimation1)
                addAnimation(alphaAnimation2)
                addAnimation(translateAnimation1)
            }
            animationSet2.apply {
                addAnimation(alphaAnimation1)
                addAnimation(alphaAnimation2)
                addAnimation(translateAnimation2)
            }
    
    
            animationSet1.setAnimationListener(object : Animation.AnimationListener {
                override fun onAnimationStart(animation: Animation?) {
                }
    
                override fun onAnimationEnd(animation: Animation?) {
                    line.startAnimation(animationSet2)
                    fp2.start()
                }
    
                override fun onAnimationRepeat(animation: Animation?) {}
            })
    
            animationSet2.setAnimationListener(object : Animation.AnimationListener {
                override fun onAnimationStart(animation: Animation?) {}
                override fun onAnimationEnd(animation: Animation?) {
                    line.startAnimation(animationSet1)
                    fp.start()
                }
    
                override fun onAnimationRepeat(animation: Animation?) {}
            })
            Log.d("FPWidget", "start")
    
        }
    
        //销毁时停止动画
        override fun onDetachedFromWindow() {
            super.onDetachedFromWindow()
            animationSet1.cancel()
            animationSet2.cancel()
        }
    
        //开始动画
        fun startAnim(){
            animationSet1.setAnimationListener(object : Animation.AnimationListener {
                override fun onAnimationStart(animation: Animation?) {
                }
    
                override fun onAnimationEnd(animation: Animation?) {
                    line.startAnimation(animationSet2)
                    fp2.start()
                }
    
                override fun onAnimationRepeat(animation: Animation?) {}
            })
    
            animationSet2.setAnimationListener(object : Animation.AnimationListener {
                override fun onAnimationStart(animation: Animation?) {}
                override fun onAnimationEnd(animation: Animation?) {
                    line.startAnimation(animationSet1)
                    fp.start()
                }
    
                override fun onAnimationRepeat(animation: Animation?) {}
            })
            line.alpha = 1f
            line.startAnimation(animationSet1)
            fp.start()
        }
    
        //停止动画
        fun resetAnim(){
            animationSet1.setAnimationListener(null)
            animationSet2.setAnimationListener(null)
            animationSet1.cancel()
            animationSet2.cancel()
            line.clearAnimation()
            line.alpha = 0f
            fp.cancel()
            fp2.cancel()
        }
    
        var job:Job? = null
        var clickTime = 0L
        override fun onTouchEvent(event: MotionEvent?): Boolean {
            when(event?.action){
                MotionEvent.ACTION_DOWN ->{
                    Log.i("limengzhen","down")
                start()
                }
                MotionEvent.ACTION_UP -> {
                    Log.i("limengzhen","up")
                    end()
                }
            }
            return super.onTouchEvent(event)
        }
    
        private fun start(){
            clickTime = System.currentTimeMillis()
    
            job = GlobalScope.launch(Dispatchers.Main) {
                delay(500)
                startAnim()
            }
        }
    
        private fun end(){
            val diffTime = System.currentTimeMillis() - clickTime
            if (diffTime < 500) {
                job?.let {
                    if (it.isActive){
                        it.cancel()
                    }
                }
            } else if (diffTime > 500 && diffTime <4000){
                resetAnim()
            } else {
                Toast.makeText(context,"恭喜你完成一次事件。",Toast.LENGTH_LONG).show()
                resetAnim()
            }
    
        }
    
    
    
    }
    

    相关文章

      网友评论

          本文标题:2023-07-14

          本文链接:https://www.haomeiwen.com/subject/hjxmudtx.html