如何从屏幕底部“滑动”Android上的视图?

时间:2013-11-03 14:39:15

标签: android animation

我正在尝试制作一个非常简单的向上滑动列表视图,当用户点击屏幕底部的按钮时会显示该视图。以下是它的外观:

sliding thingy

HTML / JS http://jsbin.com/utAQOVA/1/edit

中的完整实现

我尝试使用RelativeLayout将列表放在按钮下方,然后将整个内容放入包装器中,然后向上/向下动画(与上面的JSBin相同)。

问题在于,即使我向上滑动,在开头看不到的底部也会被某种方式修剪掉。 Evern如果我最初显示列表的一部分,如下面的屏幕显示所示,当它向上移动时底部会被剪裁,只显示最初可见的部分。

clipping

做这种动画的正确方法是什么?

Here's a relevant portion of the layout

编辑:经过简短的讨论(在接受的答案的评论中)我通过删除动画部分周围的包裹LinearLayout解决了这个问题,我只是改变了{{的高度1}},按下按钮。

2 个答案:

答案 0 :(得分:4)

你所遇到的问题可能来自于ListView如何进行自己的布局,基本上它适合屏幕上可用的大小并绘制该部分,因为你创建了没有高度的ListView或者它保持的大小非常小的高度。您可以通过两种方法解决此问题:

  1. 用简单的LinearLayout替换ListView - 填充所有 你列出项目,如果你没有很多项目,我会这样做 list - 然后是ListView优于简单LinearLayout的优点 可以忽略不计。
  2. 使用ValueAnimator并更新位置&的高度属性 动画时ListView。
  3. 改编自我在评论中提到的帖子,ValueAnimator应如下所示:

    ValueAnimator va = ValueAnimator.ofInt(0, height);
        va.setDuration(700);
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            public void onAnimationUpdate(ValueAnimator animation) {
                Integer value = (Integer) animation.getAnimatedValue();
                v.getLayoutParams().height = value.intValue();
                v.setTranslationY(-value.intValue());
                v.requestLayout();
            }
        });
    
    • 我不确定使用setTranslationY是否是这个问题的正确方法,或者你应该使用负marginTop值(取决于布局)

答案 1 :(得分:1)

您正在寻找的动画将如下所示.-

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="100%p"
    android:toYDelta="0" />

您可以运行它,将其存储为动画xml资源,并执行.-

Animation anim = AnimationUtils.loadAnimation(this, R.anim.animId);
yourView.startAnimation(anim);