0

我想让 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);
    }
}   
4

1 回答 1

0

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

另一方面,如果您将“setFillAfter”标志保留为 true,则视图应转换到所需位置,并且在 onAnimationEnd 方法中不需要修改 LayoutParams。因此,可能是某些东西阻止了转换,如果您可以提供有关视图所属布局的更多信息,那将很有帮助。

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

于 2012-08-18T16:06:14.427 回答