做SlideAnimation的正确方法是什么?

时间:2013-10-08 19:07:49

标签: android android-animation

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

    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。我应该如何实现滑动视图的目标?

1 个答案:

答案 0 :(得分:0)

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

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

如果您不需要支持Android< 3.0,那么请使用属性动画而不是视图动画 - 有关更多详细信息,请参阅Android docs