我有一个包含3个布局的活动,它们在创建活动时会膨胀,用户可以通过幻灯片放入/滑出动画(使用TranslateAnimation)在它们之间切换。
我有一个自定义布局,可以在显示或隐藏时管理动画(见下文)。当我给包含基本控件的xml布局充气时,这可以很好地工作,你可以看到前一个布局向左移动(例如),而另一个是#34;推动"它从右边到达。
问题是我的第三个布局包含GLSurfaceView的子类,并且在创建时已经绘制了一个框架。我使用addView将此自定义GLSurfaceView添加到AnimatingLinearLayout。结果是前面的布局向左滑动,但是包含GLSurfaceView的布局没有进入和移动,它只是在后面渲染并在另一个离开时被发现。我希望它能够在渲染帧的情况下从右侧滑动。
public class AnimatingLinearLayout extends LinearLayout
{
Context context;
Animation inAnimation;
Animation outAnimation;
public AnimatingLinearLayout(Context context)
{
super(context);
this.context = context;
initAnimations();
}
public AnimatingLinearLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
this.context = context;
initAnimations();
}
public AnimatingLinearLayout(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
this.context = context;
initAnimations();
}
private void initAnimations()
{
inAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(context, R.anim.layout_in_bottom_animation);
outAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(context, R.anim.layout_out_top_animation);
}
public void show()
{
if (isVisible()) return;
show(true);
}
public void show(boolean withAnimation)
{
if (withAnimation) this.startAnimation(inAnimation);
this.setVisibility(View.VISIBLE);
}
public void hide(Animation.AnimationListener listener)
{
if (!isVisible()) return;
hide(true, listener);
}
public void hide(boolean withAnimation, Animation.AnimationListener listener)
{
if (withAnimation)
{
outAnimation.setAnimationListener(listener);
this.startAnimation(outAnimation);
} else {
this.setVisibility(View.GONE);
}
}
public boolean isVisible()
{
return (this.getVisibility() == View.VISIBLE);
}
public void overrideDefaultInAnimation(int inAnimation)
{
this.inAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(context, inAnimation);
}
public void overrideDefaultOutAnimation(int outAnimation)
{
this.outAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(context, outAnimation);
}
}
如果您需要更多解释,可能会有点混乱,请询问。谢谢你的帮助。