以下内容几乎是帖的!只是在我学习的时候记录一下,方便自己日后查看 前面帧动画帖官方文档,后面属性动画是帖郭霖大神的内容,在下面有给出连接。代码大部分自己亲自敲,多敲敲才容易记哈(#^.^#)
下面只是基础,中级连接
AnimationDrawable 开发文档翻译
用于创建逐帧动画的对象,由一系列Drawable对象定义,可用作View对象的背景。
创建逐帧动画的最简单方法是在XML文件中定义动画,放置在res / drawable /文件夹中,并将其设置为View对象的背景。然后,调用 start()运行动画。
在XML中定义的AnimationDrawable由单个元素和一系列嵌套标签组成。每个项目定义了动画的一个框架。看下面的例子。
res / drawable /文件夹中的spin_animation.xml文件:
下面是加载和播放的代码
开发指南
社遏制图片的xml属性:
android:drawable: 引用可用于该帧的可绘制资源 ,我想就是一个drawable对象,里面需要是 <animotion-list>格式的对象
android:duration: 表示显示当前帧的时间,int类型
android:oneshot: 是否只运行一次 true就只运行一次 默认false
android:variablePadding:如果为true,则允许绘制的填充根据所选的当前状态进行更改。 启用此功能要求 可绘制的所有者在状态更改时处理布局,这通常不受支持。我的理解是。这个属性 设置为true的时候,动画的每一帧会根据当前布局而改变,怎么改变,需要我们自 己去设置,包括对动画的位置,大小等,都要自己处理。
android:visible: 是否可见.
java中方法就补了,自己连接去看一下,方法注释英文难度不大,http://www.android-doc.com/reference/android/graphics/drawable/AnimationDrawable.html#AnimationDrawable()
有一个网页可以拿到京东图片。提供代码测试:京东图片和代
属性动画 看看郭霖大神怎么说
ValueAnimator
ValueAnimator是整个属性动画机制当中最核心的一个类,前面我们已经提到了,属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画 设置监听器等,确实是一个非常重要的类。
学习代码:
如果不需要小数位的过度,可改为ofint 如图:
可以设置动画的重复次数,不能写Integer.MAX_VALUE。写了就不会重复了,并且动画也不会播放,不懂原因。其次是duration是执行一次的时间,如果设置了重复执行,最后一个数字他并不显示。
ObjectAnimator
ObjectAnimator可以对任意属性进行动画操作,他继承valueAnimator,
不过虽说ObjectAnimator会更加常用一些,但是它其实是继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的,因此ValueAnimator仍然是整个属性动画当中最核心的一个类。那么既然是继承关系,说明ValueAnimator中可以使用的方法在ObjectAnimator中也是可以正常使用的,
1.设置颜色渐变
这里ofFloat的参数可以无限延长。
2.设置旋转 问题:目前还不会如何沿着某一固定点旋转,下面是沿着中心旋转
3.平移
移动Y轴只要改变:translationX --->> translationY就可以
4放大缩小
中间的位置参数同样也是无限个,看需求。
到目前为止,ObjectAnimator的用法还算是相当简单吧,但是我相信肯定会有不少朋友现在心里都有同样一个疑问,就是ofFloat()方法的第二个参数到底可以传哪些值呢?目前我们使用过了alpha、rotation、translationX和scaleY这几个值,分别可以完成淡入淡出、旋转、水平移动、垂直缩放这几种动画,那么还有哪些值是可以使用的呢?其实这个问题的答案非常玄乎,就是我们可以传入任意的值到ofFloat()方法的第二个参数当中。任意的值?相信这很出乎大家的意料吧,但事实就是如此。因为ObjectAnimator在设计的时候就没有针对于View来进行设计,而是针对于任意对象的,它所负责的工作就是不断地向某个对象中的某个属性进行赋值,然后对象根据属性值的改变再来决定如何展现出来。
那么textview对象中是不是有alpha属性这个值呢?没有,不仅textview没有这个属性,连它所有的父类也是没有这个属性的!这就奇怪了,textview当中并没有alpha这个属性,ObjectAnimator是如何进行操作的呢?其实ObjectAnimator内部的工作机制并不是直接对我们传入的属性名进行操作的,而是会去寻找这个属性名对应的get和set方法,因此alpha属性所对应的get和set方法应该就是:
那么textview对象中是否有这两个方法呢?确实有,并且这两个方法是由View对象提供的,也就是说不仅TextView可以使用这个属性来进行淡入淡出动画操作,任何继承自View的对象都可以的。
组合动画
组合动画就是分别写几个单独的动画,然后创建Animator类 调用Animator的play方法,这个方法会传入一个动画,这个动画一定是最后执行!!!之后可以打点调出4个方法
注意!!!编写代码的动画顺序是反着的!!反着的!!!反着的!!!先写的后执行!!!!!!!!!
动画添加监听
但是也许很多时候我们并不想要监听那么多个事件,可能我只想要监听动画结束这一个事件,那么每次都要将四个接口全部实现一遍就显得非常繁琐。没关系,为此Android提供了一个适配器类,叫作AnimatorListenerAdapter,
这里我们向addListener()方法中传入这个适配器对象,由于AnimatorListenerAdapter中已经将每个接口都实现好了,所以这里不用实现任何一个方法也不会报错。那么如果我想监听动画结束这个事件,就只需要单独重写这一个方法就可以了,如下所示:
网友评论