繁体   English   中英

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

[英]How can I “slide up” a view on android from the bottom of a screen?

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

滑动的东西

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

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

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

剪裁

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

这是布局的相关部分

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

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

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

改编自我在评论中提到的帖子,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值(取决于布局)

你正在寻找的动画看起来像这样.-

<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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM