有时候我们想让某个控件实时的去执行某个属性动画,而有时候我们需要某个控件像view动画那样在一定的时间范围内做出某个动画效果。
那么如何做呢?下面给出相应的方法:
一:某个控件在一定的时间范围内做出属性动画效果变化
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(iv_02, "translationX", 20); ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(iv_02, "translationY", 20); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(100); animatorSet.playTogether(objectAnimatorX,objectAnimatorY); animatorSet.start();代码中的iv_02就是代表的要做动画效果的控件。且本例是一个属性动画集合变化。下面介绍第二种方式实现:
mHeader.animate().translationY(0).setDuration(300) .setInterpolator(new AccelerateInterpolator()); mContentView.animate().translationY(0).setDuration(300) .setInterpolator(new AccelerateInterpolator()); mHeader.animate().scaleX(1).setDuration(300).setInterpolator(new AccelerateInterpolator()); mHeader.animate().scaleY(1).setDuration(300).setInterpolator(new AccelerateInterpolator());代码中的mHeader和mContentView都是代表的控件,这是另外一种完成:一定时间范围内做出属性动画效果。
二:某个控件实时的做出属性动画的变化效果
代码超级简单,如下:
// 计算header移动距离(手势移动的距离*阻尼系数*0.5) float headerMoveHeight = deltaY * 0.5f * SCROLL_RATIO; // 计算content移动距离(手势移动的距离*阻尼系数) float contentMoveHeight = deltaY * SCROLL_RATIO; //属性变化 mHeader.setTranslationY(headerMoveHeight); mContentView.setTranslationY(contentMoveHeight); float scale = deltaY / mHeader.getHeight() / 2.5f + 1; mHeader.setScaleX(scale); mHeader.setScaleY(scale);从上面的代码中,我们可以看出来,这里的效果实现是用的直接设置相应的属性即可。