Android技术进阶的要素——Android属性动画
2016-07-11 16:20
489 查看
由于Android3.0之前就有了许多的动画框架,其中之一就是Animation,但是随着时代的发展和交互要求的提高,Animation的局限性也越来越明显,例如:Anmiation动画不能响应点击事件等等。因此,在Android3.0之后,Google推出了新的动画框架——属性动画(Animator)。
而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator进行更加精细化的控制,只控制一个对象的一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画。并且ObjectAnimator能够自动驱动,可以调用SetFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁的绘制界面,而在不影响动画效果的前提下减少了CPU的资源消耗。
接下来就看看属性动画中最基础的ObjectAnimator。
先看看基本的用法格式:
tv是一个控件,“alpha”是一个字符串格式的属性值,除了这个属性值,还有
translationY 、translationX :这两个属性作为一种增量来控制着View对象从布局容器的左上角坐标偏移的位置
rotation、rotationX、rotationY:控制View对象围绕支点进行2D和3D旋转。
scaleX、scaleY :控制View对象围绕支点进行2D缩放
prvotX、pivotY :控制控件围绕这个点进行缩放变换处理
x、y: 描述的是View对象在它的容器中的最终位置,它最初的左上角坐标和translationY 、translationX值的累积和。
alpha 控制透明度
这个是针对一个对象一个属性的用法,如果是有多个属性,那就要用到PropertyValuesHolder
比如现在要实现一个平移缩放的动画效果,那具体的做法就是:
其实用法跟AnimationSet类似,同时,也跟我们后面要讲的AnimatorSet的用法类似。
接下来,再看看另外在属性动画里面占有很重要的地位的类——ValueAnimator
这个类其实相当强大,就连ObjectAnimator也是继承它的。它本身不带有动画效果,但是它能生成许多的有规律的数字,那么我们有了这个数字,当然也可以实现动画的效果了,比如下面的这个用法:
这里是通过有这写数据,来不断的设置View的高度,实现一个动画的效果。
最后来看看AnimatorSet,前面提到过,它的用法和PropertyValuesHolder 是很相似的,但是不同的是,它可以实现多个对象和多种属性的同时动画效果,大概的用法如下:
在属性动画中,Animator正是通过playTogether(),with()、before等等方法来控制协调的,这样就是实现对动画播放的顺序精确控制。
今天只是简单的认识一下基本用法,我会在后期的学习中,推出具有实战意义的动画效果。谢谢阅读。
最后,感谢徐宜生大神。
而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator进行更加精细化的控制,只控制一个对象的一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画。并且ObjectAnimator能够自动驱动,可以调用SetFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁的绘制界面,而在不影响动画效果的前提下减少了CPU的资源消耗。
接下来就看看属性动画中最基础的ObjectAnimator。
先看看基本的用法格式:
private void oneObjectAnimator(View tv) { animator = ObjectAnimator.ofFloat(tv, "alpha", 300); animator.setDuration(300); animator.start(); }
tv是一个控件,“alpha”是一个字符串格式的属性值,除了这个属性值,还有
translationY 、translationX :这两个属性作为一种增量来控制着View对象从布局容器的左上角坐标偏移的位置
rotation、rotationX、rotationY:控制View对象围绕支点进行2D和3D旋转。
scaleX、scaleY :控制View对象围绕支点进行2D缩放
prvotX、pivotY :控制控件围绕这个点进行缩放变换处理
x、y: 描述的是View对象在它的容器中的最终位置,它最初的左上角坐标和translationY 、translationX值的累积和。
alpha 控制透明度
这个是针对一个对象一个属性的用法,如果是有多个属性,那就要用到PropertyValuesHolder
比如现在要实现一个平移缩放的动画效果,那具体的做法就是:
/** * 组合式动画,同一个对象的多个属性 */ public void threeObjectAnimator() { PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat( "translationX", 300f); PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX", 1f, 0); PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY", 1f, 0); ObjectAnimator.ofPropertyValuesHolder(tv, pvh1, pvh2, pvh3) .setDuration(1000).start(); }
其实用法跟AnimationSet类似,同时,也跟我们后面要讲的AnimatorSet的用法类似。
接下来,再看看另外在属性动画里面占有很重要的地位的类——ValueAnimator
这个类其实相当强大,就连ObjectAnimator也是继承它的。它本身不带有动画效果,但是它能生成许多的有规律的数字,那么我们有了这个数字,当然也可以实现动画的效果了,比如下面的这个用法:
public void oneValueAnimator() { final ValueAnimator animator =ValueAnimator.ofFloat(0,100); animator.setTarget(tv); animator.setDuration(1000).start(); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator arg0) { float value =(float) arg0.getAnimatedValue(); ViewGroup.LayoutParams layoutParams = layout.getLayoutParams(); layoutParams.height =(int) value; layout.setLayoutParams(layoutParams); } }); }
这里是通过有这写数据,来不断的设置View的高度,实现一个动画的效果。
最后来看看AnimatorSet,前面提到过,它的用法和PropertyValuesHolder 是很相似的,但是不同的是,它可以实现多个对象和多种属性的同时动画效果,大概的用法如下:
public void oneAnimatorSet(){ ObjectAnimator animator=ObjectAnimator.ofFloat(tv, "translationX", 300f); ObjectAnimator animator2=ObjectAnimator.ofFloat(tv, "scaleX", 1f,0,1f); ObjectAnimator animator3=ObjectAnimator.ofFloat(tv, "scaleY", 1f,0,1f); AnimatorSet set = new AnimatorSet(); set.setDuration(1000); set.playTogether(animator,animator2,animator3); set.start(); }
在属性动画中,Animator正是通过playTogether(),with()、before等等方法来控制协调的,这样就是实现对动画播放的顺序精确控制。
今天只是简单的认识一下基本用法,我会在后期的学习中,推出具有实战意义的动画效果。谢谢阅读。
最后,感谢徐宜生大神。
相关文章推荐
- 【Android】无法发送短信的问题
- Android Studio 插件大全
- Android Studio进行NDK开发笔记
- android之属性动画和布局动画详解
- Android之解决全屏切换非全屏的页面压缩问题
- Android 4.4 沉浸栏效果实现
- Android 隐藏状态栏
- android高级编程的设计心得
- 单例模式【Singleton Pattern】
- Android5.0双卡分析
- AndroidStudio导入项目到VisualSVN Server并忽略(ignore)相关文件详细步骤
- Android异常-socket连接失败--connect failed: EHOSTUNREACH (No route to host)
- Android Studio .gitignore 配置
- Android的startActivityForResult用法简单介绍
- Android官方侧滑菜单
- Android中Recyclerview使用3----添加条目得到点击事件和长按事件
- 用Android自带的signapk.jar签名应用程序
- Android获取32位应用签名及如何判断该签名为debug还是release
- Android 点击任意位置隐藏
- 【Android】FlatBuffer与Json