您的位置:首页 > 移动开发 > Android开发

Android动画之属性动画(Property Animation)(二)

2015-11-16 14:06 615 查看
紧接着上一篇文章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的布局动画
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: