紧接着上一篇文章Android动画之属性动画(Property Animation)(一),这一篇讲继续讲解Android的属性动画。
6、在XML中使用属性动画
属性动画同视图动画一样,也可以直接写在XML中,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="2.0"
android:valueType="floatType" >
</objectAnimator>
public void scaleX(View view)
{
// 加载动画
Animator anim = AnimatorInflater.loadAnimator(this, R.animator.scalex);
anim.setTarget(mMv);
anim.start();
}
7、View的animate方法
在Android 3.0之后,Google给View增加了animate方法来直接驱动属性动画,代码如下:
// need API12
view.animate()//
.alpha(0)//
.y(300)
.setDuration(300)
// need API 12
.withStartAction(new Runnable()
{
@Override
public void run()
{
Log.e(TAG, "START");
}
// need API 16
}).withEndAction(new Runnable()
{
@Override
public void run()
{
Log.e(TAG, "END");
runOnUiThread(new Runnable()
{
@Override
public void run()
{
}
});
}
}).start();
简单的使用view.animate().alpha(0).y(300).setDuration(300).start()就能实现动画~~不过需要SDK11,此后在SDK12,SDK16又分别添加了withStartAction和withEndAction用于在动画前,和动画后执行一些操作。当然也可以.setListener(listener)等操作。
8、Interpolates(插值器)
通过插值器,可以定义动画的变换速率,这一点非常类似物理中的加速度,其作用主要是通过控制目标变量的变化值进行对应的变化。同样的一个动画变换起始值,在不同的插值器作用下,每个单位时间内所能达到的变化值也是不一样的。
我们将上一篇中的动画代码中加入插值器,看一下效果两张图的效果差别:
主要是加入代码:
set.setInterpolator(new BounceInterpolator());
这里就简单点贴上一个弹出的效果代码了:
private void startAnim() {
ObjectAnimator animator0 = ObjectAnimator.ofFloat(
mImageViews.get(0),
"alpha",
1F,
0.5F);
ObjectAnimator animator1 = ObjectAnimator.ofFloat(
mImageViews.get(1),
"translationY",
200F);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(
mImageViews.get(2),
"translationX",
200F);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(
mImageViews.get(3),
"translationY",
-200F);
ObjectAnimator animator4 = ObjectAnimator.ofFloat(
mImageViews.get(4),
"translationX",
-200F);
AnimatorSet set = new AnimatorSet();
set.setDuration(500);
//添加插值器
set.setInterpolator(new BounceInterpolator());
set.playTogether(
animator0,
animator1,
animator2,
animator3,
animator4);
set.start();
mFlag = false;
}
关于插值器一共有下面这几种:
1、AccelerateDecelerateInterpolator开始与结束的地方速率改变比较慢,在中间的时候加速
2、AccelerateInterpolator开始的地方速率改变比较慢,然后开始加速
3、AnticipateInterpolator开始的时候向后然后向前甩
4、AnticipateOvershootInterpolator开始的时候向后然后向前甩一定值后返回最后的值
5、BounceInterpolator动画结束的时候弹起
6、CycleInterpolator循环播放特定的次数,速率改变沿着正弦曲线
7、DecelerateInterpolator在开始的地方快然后慢
8、LinearInterpolator以常量速率改变
9、OvershootInterpolator向前甩一定值后再回到原来位置
下一篇将讲解android的布局动画