setChildViewLocation()
startAnimation() //开启动画
/**
* 开启抖动动画
*/
private fun startAnimation() {
if (isOpenAnimtion) { //动画已经开启 不执行
return
}
handler2!!.sendEmptyMessage(WHAT_ADD_PROGRESS)
isOpenAnimtion = true //开启动画
}
override fun onDestroy() {
super.onDestroy()
isCancelAnimtion = true//销毁动画
//关闭handler
// handler2?.removeCallbacksAndMessages(this)
}
private val handler2: Handler = Handler {
//根据isCancelAnimtion来标识是否退出,防止界面销毁时,再一次改变UI
if (!isCancelAnimtion) {
setOffSet() //设置浮动动画
}
false
}
/**
* 设置view在父控件中的位置
*/
private fun setChildViewLocation() {
//初始速度
home2_beat.setTag(R.string.spd, 1.6f)
//随机设置view动画的方向
home2_beat.setTag(R.string.isUp, true)
//死位置
home2_beat.setTag(R.string.original_y, (home2_beat.y))
}
/**
* view变化的y抖动范围
*/
private val CHANGE_RANGE = 100
private fun setOffSet() {
//拿到上次view保存的速度
var spd = 0f
spd = if (home2_beat!!.getTag(R.string.spd) != null) {
home2_beat!!.getTag(R.string.spd) as Float
} else {
1.1f
}
//初始的位置
val original = home2_beat.getTag(R.string.original_y) as Float
val isUp = home2_beat.getTag(R.string.isUp) as Boolean
var translationY: Float
//根据tag中的上下移动标识移动view
translationY = if (isUp) {
home2_beat.y - spd //向上
} else {
home2_beat.y + spd //向下
}
//对位移范围的控制
if (translationY > (CHANGE_RANGE + home2_beat.height / 2)) { //向下 移动
translationY = original + CHANGE_RANGE + home2_beat.height / 2
home2_beat.setTag(R.string.isUp, true)
} else if (translationY < -CHANGE_RANGE + home2_beat.height) {
translationY = (original - CHANGE_RANGE + home2_beat.height)
home2_beat.setTag(R.string.isUp, false)
}
home2_beat.y = translationY
handler2.sendEmptyMessageDelayed(WHAT_ADD_PROGRESS, 13)
}
上下跳动动画
最新推荐文章于 2023-03-23 12:42:22 发布