Android LayoutAnimationController:如何强制第一个孩子在重复之前等待最后一个孩子的动画完成?

Android LayoutAnimationController:如何强制第一个孩子在重复之前等待最后一个孩子的动画完成?,第1张

概述我正在尝试构建一个动画,其中包含以下图像: 成为这个图像: 那三根酒吧像1 … 2 …… 3一样淡出…然后回到没有.此时动画将重复.这是我试图做的工作: AlphaAnimation anim = (AlphaAnimation) AnimationUtils.loadAnimation(this, R.anim.fade_in); anim.setRepeatMode(Animation 我正在尝试构建一个动画,其中包含以下图像:

成为这个图像:

那三根酒吧像1 … 2 …… 3一样淡出…然后回到没有.此时动画将重复.这是我试图做的工作:

AlphaAnimation anim = (AlphaAnimation) AnimationUtils.loadAnimation(this,R.anim.fade_in);    anim.setRepeatMode(Animation.RESTART);    anim.setRepeatCount(Animation.INFINITE);    anim.setStartOffset(3000);    LayoutAnimationController controller = new LayoutAnimationController(anim,0.5f);    rl.setLayoutAnimation(controller);    rl.startLayoutAnimation();

这几乎可以工作,但问题是那些wifi栏的视图组中的第一个孩子不会等到最后一个孩子在它关闭之前完成动画.结果是一个看起来像1 … 2 … 3..1..2.3 …… 1 … 3 … 1..2.3的节拍,而不是一个漂亮的1..2..3. .1..2..3.我需要找到一种方法让控制器等到循环完成后再将第一个孩子关闭.我还没有找到任何解决方案,有没有人有一些意见?我愿意改变我这样做的方式,这个LayoutAnimationController类似乎是迄今为止最好的方法.

谢谢!

解决方法 当我不得不为图像使用动画时,我准备了帧.我在这个类中使用了AnimatioDrawable:

* This class is a Hack to simply get an on finish callback for an* AnimationDrawable.**/public class CustomAnimationDrawable extends AnimationDrawable {// We need to keep our own frame count because mCurFrame in AnimationDrawable is privateprivate int mCurFrameHack = -1;// This is the Runnable that we will call when the animation finishesprivate Runnable mCallback = null;/** We overrIDe the run method in order to increment the frame count the same* way the AnimationDrawable class does. Also,when we are on the last frame we* schedule our callback to be called after the duration of the last frame.*/@OverrIDepublic voID run() {super.run();mCurFrameHack += 1;if (mCurFrameHack == (getNumberOfFrames() - 1) && mCallback != null) {scheduleSelf(mCallback,SystemClock.uptimeMillis() + getDuration(mCurFrameHack));}}/** We overrIDe this method simply to reset the frame count just as is done in* AnimationDrawable.*/@OverrIDepublic voID unscheduleSelf(Runnable what) {// Todo auto-generated method stubsuper.unscheduleSelf(what);mCurFrameHack = -1;}public voID setonFinishCallback(Runnable callback) {mCallback = callback;}public Runnable getonFinishCallback() {return mCallback;}}

在我的代码中我使用它像:

CustomAnimationDrawable staticAnimation = new CustomAnimationDrawable();    //add frames with resources and duration. step is just a class of mine        staticAnimation.addFrame(getResources().getDrawable(step.getStepImageResID()),step.getStepDuration());    staticAnimation.addFrame(getResources().getDrawable(step.getStepImageResID()),step.getStepDuration());        staticAnimation.setoneshot(false);        imgVIEw.setBackgroundDrawable(staticAnimation);staticAnimation.start();

可能不是最好的解决方案,但它符合我的需求.

总结

以上是内存溢出为你收集整理的Android LayoutAnimationController:如何强制第一个孩子在重复之前等待最后一个孩子的动画完成?全部内容,希望文章能够帮你解决Android LayoutAnimationController:如何强制第一个孩子在重复之前等待最后一个孩子的动画完成?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存