视图在动画中的移动时间比我想要的长两倍

时间:2012-08-18 15:08:38

标签: android android-layout

我希望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);
    }
}   

1 个答案:

答案 0 :(得分:0)

如果您想避免在现在进行两次所需的视图转换,则必须将动画的“setFillAfter”标志设置为false。正如文档所说“当setFillAfter设置为true时,动画转换将在动画结束后应用。”

另一方面,如果将“setFillAfter”标志保留为true,则视图应转换为所需位置,并且onAnimationEnd方法不需要修改LayoutParams。所以可能有些事情阻碍了转换,如果你能提供关于视图所属布局的更多信息,那么它将是最有用的。

另一件事是设置布局参数的边距以移动视图并不完全是最好的主意。把它当作黑客攻击。而是尝试直接设置视图的位置或尝试在父视图中使用权重。这样你就可以在多个不同的屏幕上获得相同的效果。