几次setAnimation调用后Android视图轮换没有发生

几次setAnimation调用后Android视图轮换没有发生,第1张

概述我一直在尝试编写一个将图像旋转到特定角度的活动方法.旋转有效,但问题是方法每隔一秒左右调用一次,但只在前几次旋转.在某个点上,动画的图像只是静止不动,即使动画正在设置并以不同的值开始!假设移动图像,就像前几次一样.private void animateNeedle(final float sfAngle) { final View viewNeed

我一直在尝试编写一个将图像旋转到特定角度的活动方法.
旋转有效,但问题是方法每隔一秒左右调用一次,但只在前几次旋转.
在某个点上,动画的图像只是静止不动,即使动画正在设置并以不同的值开始!假设移动图像,就像前几次一样.

private voID animateNeedle(final float sfAngle){    final VIEw vIEwNeedle = findVIEwByID(R.ID.needle);    final RotateAnimation needleAnimation;    RotateAnimation anim;    anim = new RotateAnimation( 0,sfAngle,m_nNeedleWIDth / 2,m_nNeedleHeight);    anim.setDuration(200);    anim.setFillAfter(true);    vIEwNeedle.setAnimation(anim);    anim.setAnimationListener(new AnimationListener()    {        @OverrIDe        public voID onAnimationEnd(final Animation animation)        {            vIEwNeedle.clearanimation();        }        @OverrIDe        public voID onAnimationRepeat(final Animation animation)        {            // Todo auto-generated method stub        }        @OverrIDe        public voID onAnimationStart(final Animation animation)        {            // Todo auto-generated method stub        }    });    anim.start();    findVIEwByID(androID.R.ID.content).postInvalIDate();}

我究竟做错了什么?
我确保在动画期间不会调用该函数两次但它没有帮助.最佳答案问题是它没有在主线程上运行,修复我们使用的:

anim = new RotateAnimation( m_lastAngle,vIEwNeedle.getWIDth() / 2,vIEwNeedle.getHeight());    anim.setDuration(1000);    anim.setFillAfter(true);    vIEwNeedle.setAnimation(anim);    anim.setAnimationListener(new AnimationListener()    {        @OverrIDe        public voID onAnimationEnd(final Animation animation)        {            // vIEwNeedle.clearanimation();        }        @OverrIDe        public voID onAnimationRepeat(final Animation animation)        {            // Todo auto-generated method stub        }        @OverrIDe        public voID onAnimationStart(final Animation animation)        {            m_lastAngle = sfAngle;        }    });    runOnUiThread(new Runnable()    {        @OverrIDe        public voID run()        {            vIEwNeedle.startAnimation(anim);            findVIEwByID(androID.R.ID.content).invalIDate();        }    });

我们还使用了:

    final VIEw vIEwNeedle = findVIEwByID(R.ID.needle);    vIEwNeedle.getVIEwTreeObserver().addOnGlobalLayoutListener(            new OnGlobalLayoutListener()            {                @OverrIDe                public voID onGlobalLayout()                {                    scaleVIEw(vIEwNeedle);                }                /**                 * Scale a vIEw.                 *                  * @param vIEwToScale - VIEw to scale.                 */                private voID scaleVIEw(final VIEw vIEwToScale)                {                    int height = (int) (vIEwToScale.getHeight() / GraphicsPoint                            .getScalePoint().y);                    int wIDth = (int) (vIEwToScale.getWIDth() / GraphicsPoint                            .getScalePoint().x);                    final LayoutParams layoutParams = vIEwToScale                            .getLayoutParams();                    layoutParams.height = height;                    layoutParams.wIDth = wIDth;                    vIEwToScale.setLayoutParams(layoutParams);                    vIEwToScale.getVIEwTreeObserver()                            .removeOnGlobalLayoutListener(this);                }            });
总结

以上是内存溢出为你收集整理的几次setAnimation调用后Android视图轮换没有发生全部内容,希望文章能够帮你解决几次setAnimation调用后Android视图轮换没有发生所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存