0
点赞
收藏
分享

微信扫一扫

Android开发艺术探索读书笔记(第7章 动画)


给Fragment设置切换动画

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(int enter,int exit);

属性动画默认时间间隔为300ms,默认帧率10ms/帧

属性动画需要定义在res/animator文件夹下

属性动画监听

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(bt, "translationY", 0, 400);
//设置动画监听
objectAnimator.addListener(new CustomAnimatorListener());
objectAnimator.setDuration(5000);
//动画执行过程中每次都会调用
objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float translationY = (float) animation.getAnimatedValue("translationY");
System.out.println("=======translationY: "+translationY);
}
});
objectAnimator.start();
}

对任意属性做动画
三种方式:
1.给对象加上set和get方法,如果你有权限
2.用一个包装类
3.使用ValueAnimatior,监听动画过程,改变属性

第一种方法基本不可行,我们看第二种

public class ViewWrapper {
private View target;

public ViewWrapper(View target){
this.target = target;
}
public void setWidth(int width){
target.getLayoutParams().width = width;
target.requestLayout();
}
public int getWidth(){
return target.getLayoutParams().width;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
viewWrapper = new ViewWrapper(bt);
}
public void click(View view){
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(viewWrapper, "width",400);
objectAnimator.setDuration(300);
objectAnimator.start();
}

Android开发艺术探索读书笔记(第7章 动画)_set方法

属性动画工作原理
对象要有get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法,要使属性动画有效果,必须满足下面两个条件:
1.必须提供set方法,如果没有初始值,还必须提供get方法
2.对象的set方法对属性的改变必须能通过某种方法反映出来。


举报

相关推荐

0 条评论