【问题标题】:android translate animation clips the part of view not shown on screenandroid翻译动画剪辑屏幕上未显示的视图部分
【发布时间】:2013-07-22 11:03:20
【问题描述】:

我有一个相对布局,其中包含一些浮动在网格视图上的文本视图。当我在网格中选择一个项目时,布局会向下移动到屏幕的末端,并且只有大约 1/5 是可见的。这是使用简单的翻译动画完成的。现在,当我单击网格中的另一个按钮时,我需要将相对布局移回其在网格视图顶部的原始位置。我也用翻译动画做到了这一点,这正在发生,但只有在折叠时可见的相对布局部分正在翻译(移动),而另一部分在动画结束后变得可见。这看起来真的很难看。

我知道 Android 不会绘制屏幕上不可见的视图部分。有没有办法强制绘制全部部分?

我的动画代码如下:

  public void smoothExpanderAnimate(final int finalTarget,final RelativeLayout expander,final int animateToY,final boolean setExpanded,final boolean refreshGrid)
{
    final RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)expander.getLayoutParams();
    TranslateAnimation anim = new TranslateAnimation(0f, 0f, 0f, animateToY);
    anim.setDuration(400);

    //timeListHeight = list.getHeight();
    //anim.setFillAfter(true);
    anim.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            //Should I try something here ?

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            head_params.topMargin = finalTarget;
            expander.clearAnimation();
            expander.setLayoutParams(head_params);

            isExpanded = setExpanded;
            isAnimating = false;



            if(!setExpanded)
            {
                setChildHeight(timeListHeight, list);
            }
        }
    });



    isAnimating = true;
    expander.startAnimation(anim);
}

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    我找到了解决方案。

    如果您不需要支持较低的 API 级别并且可以使用 API 级别 11 以后的版本,您可以使用 ObjectAnimator。 ObjectAnimator 有一个翻译方法,效果很好。

    如果您需要支持 API 8 及更高版本,则需要确保您的视图在屏幕范围内,然后进行动画处理。以下代码修改成功了。

    我知道这看起来很奇怪,如果有更好的方法,请告诉我。

     public void smoothExpanderAnimate(boolean addSpecialFix,final int finalTarget,final RelativeLayout expander,final int animateToY,final boolean setExpanded,final boolean refreshGrid)
    {
        final RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)expander.getLayoutParams();
        TranslateAnimation anim = new TranslateAnimation(0f, 0f, 0f, animateToY);
        anim.setDuration(400);
        expander.setVisibility(View.INVISIBLE); //Make View invisible
    
        if(isExpanded && addSpecialFix){  
    
        //THIS IS THE FIX
    
            int old = head_params.topMargin;
            head_params.topMargin = finalTarget;
            expander.clearAnimation();
            expander.setLayoutParams(head_params); //move invisible view to the final position
        anim = new TranslateAnimation(0f, 0f, old-closedY, 0);
        Log.d("asdasd", old+"");
        anim.setDuration(400);
    
    
        }
        //timeListHeight = list.getHeight();
        //anim.setFillAfter(true);
        anim.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
    
            }
    
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
    
            @Override
            public void onAnimationEnd(Animation animation) {
                head_params.topMargin = finalTarget;
                expander.clearAnimation();
                expander.setLayoutParams(head_params);
    
                isExpanded = setExpanded;
                isAnimating = false;
                expander.setVisibility(View.VISIBLE);
                if(refreshGrid)
                {
                    mCalAdapter.notifyDataSetChanged();
                }
    
                if(!setExpanded)
                {
                    setListHeight(timeListHeight, list);
                }
            }
        });
    
    
    
        isAnimating = true;
        expander.startAnimation(anim);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多