0

在 RelativeLayout 中,我添加了一个 ImageView,并在 LayoutParams 中设置了一些边距:

    RelativeLayout.LayoutParams rlLayoutParams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    rlLayoutParams.topMargin = (int) convertDpToPixel(kMARGIN_HEADER);
    rlLayoutParams.leftMargin = (int) myMAGIC_MARGIN;

现在这个 ImageView 在屏幕中间的某个地方。我想让它向右滑动几百像素,并保持在那里,所以我应用了以下 TranslateAnimation:

private TranslateAnimation getAnimation(ImageView view, int displacement, int duration) {
    int[] view_pos = new int[2];
    view.getLocationOnScreen(view_pos);
    TranslateAnimation slide = new TranslateAnimation(
            view_pos[0], 
            view_pos[0] + displacement,  
            view_pos[1],
            view_pos[1]);
    slide.setFillAfter(true);
    slide.setDuration(duration);
    return slide;
}

应用此动画后,整个视图立即消失。我在调试模式下检查了 view_pos[] 的值,它们很好(不是全为零)。如果我将其setFillAfter设为 false,则视图将在动画持续时间后返回(原因很明显)。那么它去哪儿了?

我还尝试了以下方法:

    TranslateAnimation slide = new TranslateAnimation(
            view_pos[0], 
            view_pos[0], // don't do the + displacement,  
            view_pos[1],
            view_pos[1]);

我原以为景色会停留在原地。但是不,它也消失了,之后有机会回来,取决于 的价值setFillAfter

我开始认为如果视图由 LayoutParams 放置在 RelativeLayout 中,我将无法应用 TranslateAnimation。我应该如何实现滑动视图的目标?

4

1 回答 1

0

TranslateAnimation 的参数是增量而不是位置,所以你只需要:

slide = new TranslateAnimation(0, displacement, 0, 0).

如果您不需要支持 Android <3.0,请使用 Property Animation 而不是 View Animation - 有关更多详细信息,请参阅Android 文档

于 2013-10-08T20:10:03.810 回答