我一直在尝试编写一个将图像旋转到特定角度的活动方法.
旋转有效,但问题是方法每隔一秒左右调用一次,但只在前几次旋转.
在某个点上,动画的图像只是静止不动,即使动画正在设置并以不同的值开始!假设移动图像,就像前几次一样.
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视图轮换没有发生所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)