属性动画实现View的宽高改变
问题
下面是对Button宽度执行动画的代码
public void click(View view) {
/*
*. 直接对View的宽度进行动画
*/
ObjectAnimator.ofInt(startBtn, "width", 400).setDuration(3000).start();
}
这种方式会发现Button的宽度执行动画后没有任何效果。原因是Button继承自TextView,TextView的setWidth()方法只是设置控件的最小宽度和最大宽度,故不会有任何效果。
解决办法
给你的对象要操作的属性加get()和set()方法(有源码才可以)
使用一个类封装原始对象,添加get()和set()方法即可
使用ValueAnimator,监听动画过程,自己实现属性值得改变
具体实现
1和2方式思路相同,只在于是否直接在源码添加get和set方法区别
public void click(View view) {
/*
* 通过封装类添加get/set方法来进行View真正宽度的改变
*/
ViewWrapper viewWrapper = new ViewWrapper(startBtn);
ObjectAnimator.ofInt(viewWrapper, "trueWidth", 400).setDuration(3000).start();
}
private static class ViewWrapper {
private View mTarget;