好的,所以我检查了 http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html
他说你可以在给定的时间内为对象的属性设置动画。我试着在物体周围移动,它看起来很好。我在更改 LinearLayout 的宽度时遇到了问题。我得到了这个:
10-26 14:51:27.190: E/PropertyValuesHolder(12681): Couldn't find setter/getter for property width with value type float
然后我尝试使用“myWidth”扩展LinearLayout
public void setMyWidth(int myWidth) {
LinearLayout.LayoutParams params = (LayoutParams) getLayoutParams();
params.weight = myWidth;
setLayoutParams(params);
requestLayout();
this.myWidth = myWidth;
}
运气不好。然后我尝试更改 LayoutParams.width,结果显示宽度和高度是 Java 历史上唯一的公共(public)属性,而 ObjectAnimator 需要 getter 和 setter。没运气。 我很尴尬地说我也尝试过扩展 LayoutParams ......没有运气。
有人成功地做了这样的事情吗?我使用旧的 android.view.animation 并得到了我想要的,但我对 future 感到好奇。
最佳答案
在没有简单属性 getter/setter 的情况下,您应该使用 ValueAnimator并手动执行动画。
假设:
- v 是您正在制作动画的 View
- END_WIDTH 是 View 的目标宽度(以像素为单位)。
- DURATION 是动画的所需长度,以毫秒为单位。
您的代码应如下所示:
ValueAnimator anim = ValueAnimator.ofInt(v.getMeasuredWidth(), END_WIDTH);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
layoutParams.width = val;
v.setLayoutParams(layoutParams);
}
});
anim.setDuration(DURATION);
anim.start();
关于android - ObjectAnimator 为 LinearLayout 宽度设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902976/