我目前正在尝试使用 TranslateAnimation 为按钮的位置设置动画。我在多个地方读到,使实际按钮和可绘制对象移动的方法是在动画之后更改其布局。我已经这样做了,但是遇到了两个问题/解决方案:
要么我添加 setFillAfter(true)。这很好,因为drawable在动画之后仍然存在,但是当布局改变时,drawable从它应该在的位置偏移了平移距离,而按钮的空白框架现在是它应该在的位置。
添加 setFillAfter(false)。这样做,然后在动画正常工作后设置布局,但图标会闪烁,我认为这是动画结束和使用新布局参数刷新屏幕之间的延迟。我目前正在使用此代码,但是 flash 是不可接受的,所以我想找到一个解决方案来修复它。
这是我目前的代码:
final View aniView = v; // v is some view
TranslateAnimation ani = new TranslateAnimation(0,
240 - v.getLeft() - v.getWidth() / 2,
0,
240 - v.getTop() - v.getHeight() / 2 );
ani.setDuration( 500 );
ani.setFillAfter( false );
ani.setAnimationListener( new AnimationListener() {
public void onAnimationEnd( Animation a ) {
aniView.setTag( new Boolean( true ) );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( aniView.getWidth(),
aniView.getHeight() );
params.leftMargin = 240 - aniView.getWidth() / 2;
params.topMargin = 240 - aniView.getHeight() / 2;
aniView.setLayoutParams(params);
}
public void onAnimationStart( Animation a ) {}
public void onAnimationRepeat( Animation a ) {}
});
v.animationStart( ani );