【问题标题】:How to create a pokemon evolution kind animation in Android如何在 Android 中创建口袋妖怪进化类动画
【发布时间】:2021-01-26 09:50:47
【问题描述】:

我想在我的应用程序中创建一个基本的“口袋妖怪进化”动画,如下所示:

我一直在玩这个:

private void evolveAnimation(Pokemon selectedToEvolvePokemon) {
    Drawable backgrounds[] = new Drawable[2];
    Resources res = getResources();
    backgrounds[0] = res.getDrawable(selectedPokemon.getImage(getContext()));
    backgrounds[1] = res.getDrawable(selectedToEvolvePokemon.getImage(getContext()));

    TransitionDrawable crossfader = new TransitionDrawable(backgrounds);

    evolveTransition.setImageDrawable(crossfader);
    crossfader.setCrossFadeEnabled(true);

    crossfader.startTransition(3000); //The animation starts slow
    crossfader.reverseTransition(3000);
    crossfader.startTransition(2000);//It gets faster slow
    crossfader.reverseTransition(2000);
    crossfader.startTransition(1000); //And faster
    crossfader.reverseTransition(1000);


}

但是,这在下面发布的 GIF 中没有按预期工作,我该如何解决这个问题?

编辑:

我已将方法更改为:

 private void doEvolve(TransitionDrawable crossfader, int durationMills) {
    crossfader.startTransition(durationMills);
    Handler h = new Handler(Looper.getMainLooper());
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            crossfader.reverseTransition(durationMills);
        }
    }, durationMills);
    if (durationMills != 0) {
        doEvolve(crossfader, durationMills - 100);
    } else {
        crossfader.startTransition(0);
    }
}

但是,工作有点奇怪。

【问题讨论】:

    标签: android android-animation android-drawable transitiondrawable


    【解决方案1】:

    目前您正在一次开始所有转换,它们应该排队

    例如,您可以使用一些Handler 及其postDelayed 方法,例如

    crossfader.startTransition(3000);
    
    Handler h = new Handler(Looper.getMainLooper());
    h.postDelayed(new Runnable() {
            @Override
            public void run() {
                crossfader.reverseTransition(3000);
            }
    }, 3000); // will start after startTransition duration
    

    将此代码打包到一些方法中,该方法将采用duration 参数和一些回调,通知启动/反向模式结束,然后以更短的持续时间再次调用此方法

    【讨论】:

    • 我已经编辑了问题,将我对您的 sn-p 的改编添加到我的代码中,请检查一下,看看缺少什么,因为它部分有效。
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多