5

我有一个在底部对齐的工具栏和一个在其上方的 WebView,它填充了剩余的高度。现在我想向下滑动工具栏以隐藏它,并且当它动画时,webview 的高度应该扩大。我试过使用 TranslateAnimation 但不幸的是它没有调整工具栏的实际位置,只是它的内容被移动了。这是我尝试过的:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%"
    android:toXDelta="0%"
    android:fromYDelta="0%"
    android:toYDelta="100%"
    android:duration="700"
    android:fillAfter="true" />

和实际的代码:

final View v = findViewById(R.id.browseToolbar);
Animation animation = AnimationUtils.loadAnimation(someContext, R.anim.toolbar_hide);
v.startAnimation(animation);

我该怎么做?

4

2 回答 2

1

我写了一些代码来做实际的调整动画。看一看:

http://www.touchlab.co/blog/resize-animation/

另请查看我在 Android 动画上所做的演示

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

本质上,如上所述,常规动画类只影响其父视图中的内容。理解它们的关键是它们不是“真实的”。将 Android 动画视为海市蜃楼。如果您运行我创建的示例应用程序,假设您执行缩放动画并使按钮更小,如果您在外部单击,即使用按钮的位置,它仍会注册为按钮单击。Android 动画实际上并不影响真实的边界和尺寸。

我的博客文章中的代码本质上是实现 ViewGroup.OnHierarchyChangeListener。当从层次结构中添加/删除内容时,容器会为物理调整大小设置动画。

于 2011-11-02T17:58:26.807 回答
0

当您使用 android 动画时,只会移动视图的像素。要实际移动视图,您需要向动画对象添加一个动画侦听器并覆盖 onAnimationEnd 方法。在该方法中,您需要以编程方式移动视图。

 AnimationListener animListener = new AnimationListener() {
     @Override
     public void onAnimationStart(Animation arg0) {}            
     @Override
     public void onAnimationRepeat(Animation arg0) {}                   
     @Override
     public void onAnimationEnd(Animation arg0) {
        Move the view here          
     }
 };

 animation.setAnimationListener(animListener);
于 2011-11-02T16:44:27.287 回答