0

为了实现导航栏ala Facebook,我有以下布局配置:

<FrameLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
>
   <!-- This is the Lower Layer hosting the navbar -->
   <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
   >
      <!-- ListView representing the navbar -->
      <ListView 
       />
   </LinearLayout>

   <!-- This is the Top Layer hosting the Content -->
   <FrameLayout 
      android:layout_width="match_parent"
      android:layout_height="match_parent"
   > 
      <!-- This is where the View of the Content will be injected -->
   </FrameLayout>
</FrameLayout>

所以基本的想法是,当我想打开导航栏时,我只需将TopLayer向右移动,导航栏就会显示出来。现在这很好用,我可以与导航栏 ListView交互以在应用程序中导航,只要注入到内部的视图TopLayer不是 a ScrollableView(如 another ListView、 aScrollView或 a WebView)。

例如,当TopLayer是一个WebView实例时,我无法滚动并与导航栏 ListView交互,因为它是WebView滚动的(尽管我将它移到了右侧)。

我想叠加许多ScrollableView's 并非易事,但我希望有一些技巧可以克服这些问题。

谢谢你的帮助!

编辑

顺便说一句,这就是我改变TopLayer视图的方式(使用TranslateAnimation):

TranslateAnimation translateAnim = new TranslateAnimation(0.0F, mListView.getWidth(), 0.0F, 0.0F);
translateAnim.setDuration(..);
translateAnim.setFillAfter(true);
mTopLayerView.startAnimation(translateAnim);
4

2 回答 2

1

根据我的应用程序 - Android UI Patterns (https://play.google.com/store/apps/details?id=com.groidify.uipatterns),Facebook 导航和动画有 2 个示例实现,这是:

如果有效,您可以尝试一下。

于 2012-04-12T15:34:52.400 回答
1

事实证明,问题不是由于叠加ScrollableViews 或其他原因,而是由于使用TranslateAnimation时动画视图的逻辑位置(即:不可视)仍然绑定到其原始位置。因此,当我以为我在点击导航的项目时,我实际上是在与ContentView我认为已经移动的项目进行交互。

现在我正在使用ObjectAnimator来解决这个问题,并且效果很好。我只需要确保与 Pre-Honeycomb 设备的兼容性(我正在考虑使用NineOldAndroids来解决这个问题。如果有人知道使用旧动画 API 正确解决此问题的任何其他替代方法,请随时回答这个问题)。

于 2012-05-09T12:45:43.723 回答