【问题标题】:What's the correct way of doing a SlideAnimation?做 SlideAnimation 的正确方法是什么?
【发布时间】:2013-10-24 15:50:43
【问题描述】:

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

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

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

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

    如果您不需要支持 Android Android docs 了解更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多