您的位置:首页 > 其它

属性动画

2015-06-19 21:52 288 查看
1、ValueAnimator

(1)继承关系图



继承自父类Animator

(2)创建对象,一般来说,常用来创建ValueAnimator的对象为静态方法ofInt,ofFloat,ofPropertyValuesHolder,ofObject,在内部实际上也是调用相关的属性构造对象

public static ValueAnimator ofInt(int... values) {
ValueAnimator anim = new ValueAnimator();
anim.setIntValues(values);
return anim;
}


(3)启动动画:start

(4)监听值变化事件:addUpdateListener

(5)实例:点击按钮开始动画,改变TextView的文字

btnStart.setOnClickListener(new OnClickListener() {

@SuppressLint("NewApi")
@Override
public void onClick(View v) {

ValueAnimator animator = ValueAnimator.ofFloat(0, 1f, 3f, 100f,1000f);
animator.setDuration(300).addUpdateListener(new AnimatorUpdateListener() {

@Override
public void onAnimationUpdate(ValueAnimator animation) {
tvText.setText(animation.getAnimatedValue()+"");
}
});
animator.start();
}
});




2、ObjectAnimator

(1)类集成关系图



可以看到ObjectAnimator也是继承自ValueAnimator.

(2)创建对象

创建ObjectAnimator对象的方法和ValueAnimator类似,但是增加了一个属性参数,拿ofFloat来说,源码:

public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
ObjectAnimator anim = new ObjectAnimator(target, propertyName);
anim.setFloatValues(values);
return anim;
}


创建的时候也是调用了构造函数,构造函数中再去调用setPropertyName,将属性传入,以便后边对属性进行修改。

(3)实例:将按钮先左移后回到原先的位置

btnStart = (Button)findViewById(R.id.btn_start);
btnTest = (Button)findViewById(R.id.testButton);

btnStart.setOnClickListener(new OnClickListener() {

@SuppressLint("NewApi") @Override
public void onClick(View v) {
float transX = btnTest.getTranslationX();
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnTest, "translationX", transX, -1 * btnTest.getWidth(), transX);
objectAnimator.setDuration(3000);
objectAnimator.start();
}
});




3、组合动画AnimatorSet实现多重效果

(1)继承关系



(2)实例:让按钮向右移动的同时向下移动

btnStart.setOnClickListener(new OnClickListener() {

@SuppressLint("NewApi")
@Override
public void onClick(View v) {
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(btnTest, "translationX", btnTest.getTranslationX(), 500);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(btnTest, "translationY", btnTest.getTranslationY(), 300);

AnimatorSet animatorSet = new AnimatorSet();

//animatorSet.play()
//.with()
//.before()
//.after();

animatorSet.play(objectAnimator1).with(objectAnimator2);
animatorSet.setDuration(3000);
animatorSet.start();
}
});




4、改变运动方式可以使用setInterpolator,进行设置,

监听动画的状态,如开始,结束,取消等,使用addListener进行设置或者使用AnimatorListenerAdapter设置监听部分动作

animatorSet.addListener(new AnimatorListener() {

@Override
public void onAnimationStart(Animator animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animator animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationEnd(Animator animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationCancel(Animator animation) {
// TODO Auto-generated method stub

}
});


5、使用xml布局写属性动画

(1)创建animator文件夹

(2)设置动画的对象

(3)实例

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="translationX"
android:valueFrom="0dp"
android:valueTo="100dp">
</objectAnimator>


Animator animator = AnimatorInflater.loadAnimator(AnimatorSetActivity.this, R.animator.trans_btntest);
animator.setTarget(btnTest);
animator.start();


(4)xml布局实现组合动画,很简单,只需要将两个animator卸载set中,进行加载执行就好。

这里:属性中可以标注是顺序播放或者是同时播放的关系。

<animator> 对应代码中的ValueAnimator
<objectAnimator> 对应代码中的ObjectAnimator
<set> 对应代码中的AnimatorSet

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator
android:duration="1000"
android:propertyName="translationX"
android:valueFrom="0dp"
android:valueTo="100dp">
</objectAnimator>

<objectAnimator
android:duration="1000"
android:propertyName="translationY"
android:valueFrom="0dp"
android:valueTo="100dp">
</objectAnimator>
</set>


6、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: