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

Jak*_*old 6 animation android

我正在尝试创建一个非常简单的向上滑动列表视图,当用户单击屏幕底部的按钮时会显示该视图.这是它应该看起来的样子:

滑动的东西

并在HTML/JS http://jsbin.com/utAQOVA/1/edit中完整实现

我试图用它RelativeLayout来定位按钮下方的列表,然后将整个内容放入包装器中,然后向上/向下动画(与上面的JSBin相同).

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

剪裁

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

这是布局的相关部分

编辑:经过简短的讨论(在接受的答案的评论中)我通过删除LinearLayout动画部分周围的环绕来解决这个问题,我只是改变了高度ListView,将按钮向上推.

Raa*_*nan 4

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

  1. 用简单的 LinearLayout 替换 ListView - 填充所有列表项,如果列表上没有很多项目,我会这样做 - 那么 ListView 相对于简单 LinearLayout 的优势可以忽略不计。
  2. 使用 ValueAnimator 并在动画时更新 ListView 的位置和高度属性。

改编自我在评论中提到的一篇文章 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();
        }
    });
Run Code Online (Sandbox Code Playgroud)
  • 我不确定使用 setTranslationY 是否是解决此问题的正确方法,或者您应该使用负 marginTop 值(取决于布局)