我LayoutParams
转换addRule()
。
我的观点会改变位置,但持续时间是即时的。
我在API 15上工作,所以我无法使用beginDelayedTransition()
。
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final RelativeLayout.LayoutParams positionRules = new RelativeLayout.LayoutParams(layoutFalse.getWidth(), layoutFalse.getHeight());
positionRules.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
positionRules.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
layoutFalse.requestLayout();
layoutFalse.setLayoutParams(positionRules);
}
};
a.setDuration(3000);
layoutFalse.startAnimation(a);
答案 0 :(得分:1)
applyTransformation()
,转换应使用interpolatedTime
参数来计算该帧的变换。您的applyTransformation()
无条件地应用更改,因此所有帧的结果都相同。
如果您只想在指定时间后更改布局,请使用layoutFalse.postDelayed()
发布在延迟后应用更改的Runnable
。
答案 1 :(得分:1)
在这个区块中你不做任何动画。 你只要说:
让这个对象在每个框架中与我想要的对立面。没有了。
所以,我认为,如果你想动画一些东西,你必须像这样使用interpolatedTime: 在没有动画的情况下在RelativeLayout内设置视图的位置:
public void setTopLeftCornerF(float leftMargin, float topMargin) {
if (this.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)this.getLayoutParams();
params.width = (int)_width;//w();
params.height = (int)_height;//h();
params.setMargins((int)leftMargin, (int)topMargin, (int)-leftMargin, (int)-topMargin);
this.setLayoutParams(params);
}
}
在某处使用动画:
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
// TODO Auto-generated method stub
super.applyTransformation(interpolatedTime, t);
float posX = (float) (mFromX + ((mToX - mFromX) * interpolatedTime));
float posY = (float) (mFromY + ((mToY - mFromY) * interpolatedTime));
t.getMatrix().setTranslate(posX,posY);
}
或按照here
所述使用TranslateAnimation
答案 2 :(得分:0)
在这里,
layoutFalse.requestLayout();
layoutFalse.setLayoutParams(positionRules);
你的顺序错了。因为您应首先设置layoutParams
,然后在requestLayout
上致电view
。
应该如下
layoutFalse.setLayoutParams(positionRules);
layoutFalse.requestLayout();