好的,所以我查了 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
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用"myWidth"扩展LinearLayout
public void setMyWidth(int myWidth) {
LinearLayout.LayoutParams params = (LayoutParams) getLayoutParams();
params.weight = myWidth;
setLayoutParams(params);
requestLayout();
this.myWidth = myWidth;
}
Run Code Online (Sandbox Code Playgroud)
没运气.然后我尝试更改LayoutParams.width,结果宽度和高度是java历史记录中唯一的公共属性,而ObjectAnimator需要getter和setter.没运气.我很尴尬地说我试图扩展LayoutParams ...没有运气.
有人成功做了这样的事吗?我使用了旧的android.view.animation,我得到了我想要的东西,但我对未来感到好奇.
Tom*_*ler 124
在没有简单属性getter/setter的情况下,您应该使用ValueAnimator并手动执行动画.
假设:
您的代码应如下所示:
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();
Run Code Online (Sandbox Code Playgroud)
use*_*321 21
这是值得的.更改布局参数上的宽度后,您必须重置布局参数对象.
private class WidthEvaluator extends IntEvaluator {
private View v;
public WidthEvaluator(View v) {
this.v = v;
}
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
int num = (Integer)super.evaluate(fraction, startValue, endValue);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = num;
v.setLayoutParams(params);
return num;
}
}
// your client code
ValueAnimator.ofObject(new WidthEvaluator(box), box.getWidth(), v.getWidth()).start();
Run Code Online (Sandbox Code Playgroud)
我创建了一个小型库ViewPropertyObjectAnimator
,可以用一种非常简单的方式实现这一点(并使用与Tomer Weller提出的类似方法).
您可以使用(假设mLinearLayout
是动画View
并且mEndWidth
是View's
宽度的结束值)来实现此动画:
ViewPropertyObjectAnimator.animate(mLinearLayout).width(mEndWidth).start();
Run Code Online (Sandbox Code Playgroud)
你犯了一个错误
params.weight = myWidth;
Run Code Online (Sandbox Code Playgroud)
我认为这是params.width而不是params.weight
归档时间: |
|
查看次数: |
36367 次 |
最近记录: |