3 回答
TA贡献1865条经验 获得超7个赞
我正在通过在onAnimationEnd内进行动画处理的视图上调用clearAnimation()来解决此问题,这消除了闪烁的原因,为什么有人必须这样做,因为仅当动画已经结束时才应调用onAnimationEnd回调。但是我想答案就在于Framework的深度,即视图/布局如何处理动画回调。现在,将其作为无黑客解决方案,就可以了。
animation.setAnimationListener(new AnimationListener() {
public void onAnimationEnd(Animation anim) {
innerView.clearAnimation(); // to get rid of flicker at end of animation
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
(innerBlockContainer.getWidth(), innerBlockContainer.getHeight());
/* Update lp margin, left/top to update layout after end of Translation */
ViewGroup parent_ofInnerView = (ViewGroup)innerView.getParent();
vp.updateViewLayout(innerBlockContainer, lp);
}
public void onAnimationRepeat(Animation arg0) {}
public void onAnimationStart(Animation arg0) {
}
});
TA贡献1876条经验 获得超6个赞
我有一个类似的问题,我在自定义视图类中使用了Soham的解决方案。
效果很好,但最后,我找到了一个对我有用的简单解决方案。
调用了之后view.StartAnimation(animation),并在程序中进行下一步之前,我添加了一个短暂的延迟,该延迟足够长以使动画结束,但又足够短以使用户无法察觉:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
nextStepInMyProgram();
}
}, 200);// delay in milliseconds (200)
- 3 回答
- 0 关注
- 797 浏览
添加回答
举报