qt怎么将按钮设为图片
317
2022-12-01
Android小心心动画
我们这个动画其实是由一系列的基本动画组成的。所以我们只要找出这些动画并将它们一个接一个执行起来,那么这些基本动画的的共同作用下就有了我们想要的效果。就像高中我们学的合力,合力就是我们最终的动画效果,分力就是我们的基本动画。
现在我们来分析一下这个每个心图片的动画效果有哪些基本动画,因为上面只是产生了多个心图片的动画,我们只需要分析一个就够:
translationX,translationY:理由是动画在水平方向和垂直方向都有移动scale:理由是动画有一个小变大的过程alpha:理由是动画的图片rotation:理由是图片有角度的变化
各个动画的实现
translationX
private fun createTranslationX(imageView: ImageView,x:Float): Animator { val animator = ObjectAnimator.ofFloat(imageView, "translationX", x,(x+Math.random()*60).toFloat(),(x-Math.random()*60).toFloat()) animator.duration = mDuration animator.interpolator = CycleInterpolator((1 * Math.random()).toFloat()) return animator }
translationY
private fun createTranslationY(imageView: ImageView,y:Float): Animator { val animator = ObjectAnimator.ofFloat(imageView, "translationY", y, 0f) animator.duration = mDuration animator.interpolator = AccelerateInterpolator() return animator }
scale
private fun createScale(imageView: ImageView): Animator { val animatorX = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 1.5f) val animatorY = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 1.5f) val animatorSet = AnimatorSet() animatorSet.duration = mDuration animatorSet.interpolator = AccelerateInterpolator() animatorSet.play(animatorX).with(animatorY) return animatorSet }
注意:scale要在两个方向上做,否则会变形
alpha
private fun createAlpha(imageView: ImageView): Animator { val animator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0.1f) animator.duration = mDuration animator.interpolator = AccelerateInterpolator() return animator }
最后执行这一系列的动画
fun start(x:Float=(width/2).toFloat(),y:Float = (height/2).toFloat()) { val imageView = createHeartView() addView(imageView) val animatorSet = AnimatorSet() animatorSet.play(createTranslationX(imageView,x)) .with(createTranslationY(imageView,y)) .with(createScale(imageView)) .with(createRotation(imageView)) .with(createAlpha(imageView)) animatorSet.addListener(onEnd = { removeView(imageView) }) animatorSet.start() }
使用这个自定义的动画
Activity:
val layout = findViewById
xml布局:
Demo
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~