使用ViewAnimator滑出丢弃的旧视图,然后在新视图中滑动

时间:2013-10-01 05:47:57

标签: android

目前,我有一个ViewAnimator,用于保存顶部的绿色图表

    this.chartViewAnimator = (ViewAnimator)chartContainer.findViewById(R.id.chart_view_animator);        
    this.chartViewAnimator.setAnimateFirstView(true);
    Animation slideInLeft = AnimationUtils.loadAnimation(this.getActivity(), android.R.anim.slide_in_left);
    Animation slideOutRight = AnimationUtils.loadAnimation(this.getActivity(), android.R.anim.slide_out_right);
    int configMediumAnimTime = 2000;
    slideInLeft.setDuration(configMediumAnimTime);
    slideOutRight.setDuration(configMediumAnimTime);
    this.chartViewAnimator.setInAnimation(slideInLeft);
    this.chartViewAnimator.setOutAnimation(slideOutRight);

enter image description here

现在,我想更改顶部图表的持续时间。我期待

  • 用于滑出旧绿色图表并永久丢弃它的动画(不要留在内存中)。
  • 要在新红色图表中滑动的动画。

enter image description here

我使用以下代码。

// Discard old chart. I'm expecting view animator will perform slide out animation.
chartViewAnimator.removeAllViews();
// I expect view animator will perform slide in animation.
chartViewAnimator.addView(graphicalView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

但是,根本没有任何动画。

首先,我希望在通过removeAllViews丢弃旧视图时,ViewAnimator会为我执行幻灯片动画。当添加新的红色图表时,我也期望ViewAnimator将在动画中执行幻灯片。

好像我错了。有没有我错过的步骤?

1 个答案:

答案 0 :(得分:1)

在插入新视图时,永远删除所有旧视图,不会触发任何动画。 ViewAnimator内应该至少有2个观看次数,以便观察幻灯片和幻灯片的效果。

    chartViewAnimator.addView(graphicalView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    // Ensure there is always at least 2 views.
    if (chartViewAnimator.getChildCount() >= 3) {
        chartViewAnimator.removeViewAt(0);
    }
    chartViewAnimator.setDisplayedChild(chartViewAnimator.getChildCount() - 1);