我希望myView从当前位置移动deltaX,deltaY像素。 但它的移动时间比我想要的长两倍。 这是由onAnimationEnd中的setLayoutParams引起的。 没有它,myView的真实位置不会改变。 如何更改myView的真实位置并正常制作动画?
class MyLayout extends RelativeLayout {
Animation animation;
MyView myView;
animation = new TranslateAnimation(0, deltaX, 0, deltaY);
animation.setDuration(100);
animation.setFillAfter(true);
myView.startAnimation(animation);
}
class MyView extends ImageView {
protected void onAnimationEnd() {
super.onAnimationEnd();
LayoutParams params = (LayoutParams)getLayoutParams();
params.leftMargin += deltaX;
params.topMargin += deltaY;
setLayoutParams(params);
}
}
答案 0 :(得分:0)
如果您想避免在现在进行两次所需的视图转换,则必须将动画的“setFillAfter”标志设置为false。正如文档所说“当setFillAfter设置为true时,动画转换将在动画结束后应用。”
另一方面,如果将“setFillAfter”标志保留为true,则视图应转换为所需位置,并且onAnimationEnd方法不需要修改LayoutParams。所以可能有些事情阻碍了转换,如果你能提供关于视图所属布局的更多信息,那么它将是最有用的。
另一件事是设置布局参数的边距以移动视图并不完全是最好的主意。把它当作黑客攻击。而是尝试直接设置视图的位置或尝试在父视图中使用权重。这样你就可以在多个不同的屏幕上获得相同的效果。