文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying以及作者@恺风Wei。
Animation API在Android3.0后有很大的变化,新的方式成为property animation(属性动画)。我们在之前的Pro Android学习笔记(四二):Fragment(7):切换效果中已经接触过。前面学习的2D动画属于旧的animation API,由android.view.animation包实现,而新的animaition API是在android.animation包中。
ValueAnimation
属性动画描述的是一组变化,这个变化可以针对某个数值,也可以针对某个对象。下面先看看最简单的针对数值的变化。
private void basicPropertyTest(){
showInfo("Basic Property Test");
ValueAnimator anim = ValueAnimator.ofInt(10,200); //设置从10到200变化的整数,缺省每10ms变化一次,如果是模拟器,由于性能缘故,间隔大于10ms。
anim.setDuration(5000); //渐变的时间为5秒
anim.addUpdateListener(new AnimatorUpdateListener() { //数值变化的回调函数
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (Integer) animation.getAnimatedValue();
showInfo("update: " + value);
}
});
anim.addListener(new AnimatorListener() { //用于检测变化的状态,例如开始,结束
@Override
public void onAnimationStart(Animator animation) {
showInfo("onAnimationStart");
}
@Override
public void onAnimationRepeat(Animator animation) {
showInfo("onAnimationRepeat");
}
@Override
public void onAnimationEnd(Animator animation) {
showInfo("onAnimationEnd");
}
@Override
public void onAnimationCancel(Animator animation) {
showInfo("onAnimationCancel");
}
});
anim.start();
}
private void showInfo(String info){
Log.v("WEI",info);
tv.setText(info + "\n" + tv.getText());
}
对应到View的ObjectAnimation
通过ValueAnimation我们了解了属性动画的回调函数。下面小例子将用于View。
代码片段如下:
....
TextView tv = (TextView)findViewById(R.id.text_property);
....
public void toggleAnimation(View v){
Button button = (Button)v;
if(tv.getAlpha() != 0){ //检查当前的alpha的数值,如果大于0(可视)就将之变为不可视(=0)
ObjectAnimator fadeout = ObjectAnimator.ofFloat(tv, "alpha", 0.0f); //将alpha从当前值变为0(看不见),ofFloat()表明这是对tv对象(参数1)的alpha属性(参数2)进行的浮点类型数值的变化,从当前值变化至目标值(参数3)。哪些可以作为属性,需要具备setXXX()方法,则具备XXX属性,本例Textview对象具有public方法view.setAlpha(float f)方法,故具有属性alpha。初始值从view.getAlpha()中获取。如果带有4个参数,例如ofFloat(tv,"alpha",1.0f,0.0f),则第三个参数标识from的数值,第4个参数标识to的数值,即从alpha属性从1.0变为0.0。
fadeout.setDuration(5000);
fadeout.start();
button.setText("Fade In");
}else{
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(tv, "alpha", 1.0f);//将alpha从当前值变为1
fadeIn.setDuration(5000);
fadeIn.start();
button.setText("Fade Out");
}
}
小例子代码在:Pro Android学习:2D动画小例子
相关链接:我的Android开发相关文章