如何在android中滑入和滑出视图

时间:2013-05-27 17:26:42

标签: java android android-animation

我正在尝试根据活动中其他事件的上下文创建一个视图(带有一些按钮的线性视图 - R.id.playerControl

为此,我有一个selectMediaItem方法,当用户分别选择或取消选择项目时,该方法应显示或隐藏视图。

我是Android的动画新手,因为两个原因我无法解决这个问题:

  1. 视图在动画时间之外保留在屏幕上,因此当它完成滑出后会跳回 - 然后当请求滑入时它跳出来滑回。

  2. 当视图消失时,屏幕上会有一个永久的黑色空间。我希望视图在可见时填充空间,而不是GONE时。为此,我希望布局能够随动画一起改变,以便它可以将其他东西推开。

  3. 我的代码:

    protected void selectMediaItem( ItemHandle item ) {
    
        if (item != null) {
            if (toPlay == null) {
                View playerControl = findViewById(R.id.playerControl);
                Animation slideInAdmination = AnimationUtils.loadAnimation(this, R.anim.slide_in);
                playerControl.startAnimation(slideInAdmination);
            }
        }
        else {
            if (toPlay != null) {
                View playerControl = findViewById(R.id.playerControl);
                Animation slideInAdmination = AnimationUtils.loadAnimation(this, R.anim.slide_out);
                playerControl.startAnimation(slideInAdmination);
            }
        }
        toPlay = item;
    }
    

    slide_in.xml          

        <translate
            android:duration="1000"
            android:fromYDelta="100%p"
            android:toYDelta="0" />
    
    
    </set>
    

    是否有一种简单的方法可以将视图滑动到位并再次将其滑出?

2 个答案:

答案 0 :(得分:4)

我强烈建议您使用Property Animations。您的示例代码就像。

mSlidInAnimator = ObjectAnimator.ofFloat(mSlidingView, "translationY", 0);
mSlidInAnimator.setDuration(200);
mSlidInAnimator.start();

mSlidOutAnimator = ObjectAnimator.ofFloat(mSlidingView, "translationY", newPosOfView);
mSlidOutAnimator.setDuration(200);
mSlidOutAnimator.start();

“translationY”表示向上/向下动画。使用“translationX”作为右侧动画。

这里newPosOfView将是相对于您的默认视图位置的位置。例如,如果要将视图向下移动50dp,则为50dp(以像素为单位)。在slideInAnimator中,pos为0,因为您想要移动到视图的原始位置。

仔细阅读文档,非常有帮助。

答案 1 :(得分:0)

您需要添加:

slideInAdmination.setFillerAfter(true)
在致电startAnimation()之前

。这会导致视图在动画后保持在新位置。