【问题标题】:Animate View/Rect on creation?创建动画视图/矩形?
【发布时间】:2016-01-30 19:12:23
【问题描述】:

我的 onCreate 方法中有以下代码:

layout.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Paint p = new Paint();
                    field = new Token[FIELDSIZE][FIELDSIZE];
                    for (int i =0; i < FIELDSIZE ; i++) {
                        for (int j = 0; j < FIELDSIZE; j++) {
                            Token tmp = new Token(j, i, p, false, PlayActivity.this);
                            field[j][i] = tmp;
                            layout.addView(tmp);
                        }
                    }

它创建了这个:

但它就在那里,活动出现了。 我怎样才能动画它?像一个接一个地消失/飞入或其他什么?

提前致谢

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    你应该试试这个:

    layout.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        Paint p = new Paint();
                        field = new Token[FIELDSIZE][FIELDSIZE];
                        for (int i =0; i < FIELDSIZE ; i++) {
                            for (int j = 0; j < FIELDSIZE; j++) {
                                Token tmp = new Token(j, i, p, false, PlayActivity.this);
                                field[j][i] = tmp;
                                // Make it invisible in the beginning
                                tmp.setAlpha(0);
                                layout.addView(tmp);
                                tmp.animate()
                                    .alpha(1.0)
                                    .setDuration(600)
                                    .setStartDelay(100 + i * FIELDSIZE * 10 + j * 10);
                            }
                        }
    

    您可以使用这些值,直到它们对您有好处。您也可以一起尝试 setScaleX 和 setScaleY,例如:

    tmp.setScaleX(0);
    tmp.setScaleY(0);
    

    然后:

    tmp.animate()
       .scaleX(1.0)
       .scaleY(1.0)
       .setDuration(600)
       .setStartDelay(100 + i * FIELDSIZE * 10 + j * 10);
    

    【讨论】:

    • 如果在setStartDelay(...) 之后添加.start() 会怎样?您只看到白色屏幕还是相同的蓝色图块?
    • 可能动画太快了。尝试更高的startDelay,例如:.setStartDelay(2000 + i * FIELDSIZE * 10 + j * 10);
    • 如果你删除动画线它保持白色?
    • 哦,你重写了 onDraw()? :) 那么这就是问题所在。您可以更改 onDraw 以将 alpha 也考虑在内,因此当您绘制时,您检查 getAlpha() 然后绘制该颜色。
    • 如果我是你,我只会添加具有 fized 大小的视图,并设置彩色背景。
    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2014-05-06
    • 2014-01-01
    • 2012-04-03
    • 2011-04-18
    • 2019-02-14
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多