【问题标题】:Android: how to hide and then show View with animation effect?Android:如何隐藏然后显示带有动画效果的视图?
【发布时间】:2010-03-22 21:16:33
【问题描述】:

我也有类似的问题:Update layout with the animation

基本上:我有一个带有编辑文本、按钮和列表的垂直 LinearLayout 视图。我想在按下按钮后隐藏退出文本以便为列表腾出更多空间(按钮会上升)。在第二次按下edittext 应该再次可见。 Edittext 和按钮的高度为“wrap_content”。

我想用动画隐藏和显示edittext。

我通过重载Animation的applyTransformation成功实现了隐藏动画:

final float edittextheight= edittext.getHeight();
[....]
@Override
protected void applyTransformation(float interpolatedTime,
        Transformation t)
{
    super.applyTransformation(interpolatedTime, t);
    android.view.ViewGroup.LayoutParams lp = edittext.getLayoutParams();
    lp.height = (int)(edittextheight*(1.0-interpolatedTime));
    edittext.setLayoutParams(lp);
}

问题:

我不知道如何计算高度以动画显示 - edittext.getHeight();当小部件被隐藏并且在布局定义中我使用“wrap_content”时返回 0。

帮助?

【问题讨论】:

    标签: android animation layout hide


    【解决方案1】:

    在活动完成绘制它之前,您无法获得 edittext 的高度。因此,您可以通过在编辑文本上添加 onpredrawListner 来获取它。

    ViewTreeObserver treeObserver = edittext.getViewTreeObserver();
    treeObserver.addOnPreDrawListener(new OnPreDrawListener() {
        public boolean onPreDraw() {
                int height = edittext.getHeight();
                ViewTreeObserver removeTreeObserver = edittext.getViewTreeObserver();
         removeTreeObserver.removeOnPreDrawListener(this);
              }
    }
    

    现在你得到了高度,应用你想要的任何动画。

    【讨论】:

    • 在我看来这太复杂了。同样的事情可以通过view.post(runnable); 来实现。在 runnable 中,您可以访问元素的高度。
    【解决方案2】:

    你能缓存 EditText 的高度吗?换句话说,当你隐藏它时,将它的高度(使用 getHeight())保存在一个 int 中,即使小部件本身不再可见,你以后也可以读取它。

    但是,我怀疑您也遇到了与我类似的问题,在此 question 中进行了描述。本质上是在 onCreate、onStart 和 onPause 完成 all 之后才能获得 View 的高度,因为在此之前活动还没有完成在屏幕上的绘制。在尝试获取其高度之前了解布局过程已完成的一个好方法是简单地获取按钮 ClickListener 中的高度;在布局完成之前,您根本无法单击按钮,因此它将完成高度计算。

    【讨论】:

    • 将高度保存为固定值的问题是,再次可见后,高度固定,可能无法为输入提供足够的空间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多