<pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Android属性动画Property Animation,详细介绍看郭大神博客:</span><a target=_blank href="http://blog.csdn.net/guolin_blog/article/details/43536355" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">点击打开链接</a>
这里把一些博客汇总了下,加上自己总结的部分内容,作为自己的备忘,方便随时查找
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一些相关内容:
补间动画xml文件放在res/anim目录下;
属性动画xml文件放在res/animator目录下。
Animator:属性动画基类
AnimatorSet:属性动画集合
ValueAnimator:值动画
ObjectAnimator:对象动画
AnimatorListener:监听器
AnimatorListenerAdapter:单独监听某个事件的监听器
XML实现属性动画:
文件的根节点必须是下面3个其中一个:
<set> :对应AnimatorSet(属性动画集合)
<objectanimator> :对应ObjectAnimator(对象属性动画)
<animator> :对应ValueAnimator(值属性动画)
<set>标签属性:
android:ordering="together | squentially" -同时进行 | 顺序进行
<set>子标签:
可以包含<set>、< objectanimator >和<animator>三种标签;
< objectanimator>标签属性:
android:propertyName="string"
android:propertyXName="string"
android:propertyYName="string"
android:pathData=""
android:interpolator="" -动画插值器
android:duration="int" -动画持续时间
android:startOffset="int" -延迟播放时间
android:repeatCount="int" -动画循环次数
android:repeatMode="[restart|reverse]" -动画循环模式
android:valueFrom="float|int|color" -起始值
android:valueTo="float|int|color" -结束值
android:valueType="[intTyle|floatType]"
其中android:propertyName常用的值有:
1)translationX 和 translationY:这两个属性控制了View所处的位置, 它们的值是由layout容器设置的,是相对于坐标原点(0,0左上角)的一个偏移量。
2)rotation, rotationX 和 rotationY:控制View绕着轴点(pivotX和pivotY)旋转。它的表现跟Tween Animation中的RotateAnimation不一致。
RotateAnimation 的旋转,表现为平面的旋转
而rotationX、Y 旋转,是立体的旋转,默认是以View的中心点,做rotation(x,y)过中心点的直线,面向该直线进行翻转
3)scaleX 和 scaleY:控制View基于pivotX和pivotY的缩放。
4)pivotX 和 pivotY:旋转的轴点和缩放的基准点,默认是View的中心点。
5)x 和 y:描述了view在其父容器中的最终位置,是左上角坐标和偏移量(translationX,translationY)的和。
6)aplha:透明度,1是完全不透明,0是完全透明。
以上这些属性与Tween Animation的动画属性值差不多
动画插值器常用的值有:
<animator>标签属性:
android:interpolator="" -动画插值器
android:duration="" -动画持续时间
android:startOffset="" -延迟播放时间
android:repeatCount="" -动画重复次数
android:repeatMode="" -动画重复行为
android:valueFrom="" -起始值
android:valueTo="" -结束值
android:valueType=""
代码中调用:
TextView tv1 = (TextView) findViewById(R.id.v1);
AnimatorSet set = (AnimatorSet)AnimatorInflater.loadAnimator(this, R.animator.set_anim);
set.setTarget(tv1);
set.start();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上面用XML实现的属性动画,也可以在代码中实现:
ObjectAnimator:对象动画
TextView tv5 = (TextView) findViewById(R.id.v1);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(tv5, "rotation", 0, 180);
objectAnimator2.setDuration(2000);
objectAnimator2.setStartDelay(2000);
objectAnimator2.setRepeatCount(3);
objectAnimator2.setRepeatMode(Animation.REVERSE);
objectAnimator2.setInterpolator(new BounceInterpolator());
objectAnimator2.start();
ValueAnimator:属性动画
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);
valueAnimator.setDuration(3000);//持续时间
valueAnimator.setStartDelay(2000);//延迟播放时间
valueAnimator.setRepeatCount(2);//循环次数
valueAnimator.setRepeatMode(Animation.RESTART);
valueAnimator.start();
AnimatorSet:属性动画集合
- after(Animator anim) 将现有动画插入到传入的动画之后执行
- after(long delay) 将现有动画延迟指定毫秒后执行
- before(Animator anim) 将现有动画插入到传入的动画之前执行
- with(Animator anim) 将现有动画和传入的动画同时执行
ObjectAnimator moveIn = ObjectAnimator.ofFloat(tv6, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(tv6, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(tv6, "alpha", 1f, 0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();
Interpolator:插入器
参考博客:点击打开链接
常见插值器:
AccelerateInterpolator 加速插值器
AccelerateDecelerateInterpolator 加速减速插值器
LinearInterpolator 线性插值器
BounceInterpolator弹跳插值器
AnticipateInterpolator回荡秋千插值器
AnticipateOvershootInterpolator
CycleInterpolator正弦周期变化插值器
OvershootInterpolator
代码设置插值器:
anim.setInterpolator(new BounceInterpolator());
xml中设置插值器:
android:interpolator="@android:anim/bounce_interpolator"
动画监听事件
objectAnimator2.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator arg0) {
//动画开始的时候调用
}
@Override
public void onAnimationRepeat(Animator arg0) {
//动画重复执行的时候调用
}
@Override
public void onAnimationEnd(Animator arg0) {
//动画结束的时候调用
}
@Override
public void onAnimationCancel(Animator arg0) {
//动画被取消的时候调用
}
});
如果只需监听一个事件,可以用AnimatorListenerAdapter:
objectAnimator2.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~