Android视图动画在首次运行(活动启动)时不可见,但此后可见

时间:2018-06-20 06:32:06

标签: android animation view uiviewanimation android-transitions

也有类似的问题,但是所有这些问题都建议将视图的初始可见性设置为INVISIBLE,而不是GONE。我的情况不同。

我的仪表板上有大约5个按钮,我正在手动对其进行充气,以将其添加到我的LinearLayout中。我可以始终以VISIBLE看到膨胀视图。将view添加到LinearLayout之后,我试图对其进行动画处理(从底部滑动到其位置),但是它不起作用。我的代码如下。

private void setDashboardButtons() {
    ArrayList<String> dashboardTitles = DashboardUtils.getDashboardTitles();
    ArrayList<Integer> dashboardIcons = DashboardUtils.getDashboardIcons();

    ViewGroup root = findViewById(R.id.button_container);

    for (int i = 0; i < (dashboardTitles.size() < dashboardIcons.size() ? dashboardTitles.size() : dashboardIcons.size()); i++){
        View buttonView = DashboardButtonInflater.getDashboardButton(root, dashboardTitles.get(i), dashboardIcons.get(i), this);
        if (buttonView == null) continue;
        buttonView.setOnClickListener(this);
        root.addView(buttonView);
        YoYo.with(Techniques.SlideInUp)
                .duration(1000)
                .playOn(buttonView);
    }
}

YOYO是一个非常简单且广泛使用的库,用于查看过渡动画。

结果

我在活动的setDashboardButtons()方法内称此onCreate()方法。活动加载后,我只会看到fadeIn动画,而不是过渡动画。如果我在单击按钮时实现相同的动画,则效果很好(因为到那时视图已经膨胀了)。

我可以猜测是由于动画在渲染视图之前发生而发生的,但是我不知道该如何解决。

我尝试做的一件事就是在里面做动画

buttonView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //Animating view here
            }
        });

这很奇怪,但是看起来很丑。

期望

我希望活动开始时在slideIn上执行buttonView动画。希望能就此提供任何帮助。

0 个答案:

没有答案