TranslateAnimation不适用于包含GLSurfaceView的布局

时间:2014-05-23 13:19:46

标签: android android-layout android-animation glsurfaceview

我有一个包含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);
    }
}

如果您需要更多解释,可能会有点混乱,请询问。谢谢你的帮助。

0 个答案:

没有答案