0

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を右にシフトするだけで、ナビゲーションバーが表示されるということです。これでうまく機能し、アプリケーション内を移動するためにナビゲーションバーを操作できます。ただし、内部に挿入されるビューが(別の、、、またはのように ない場合に限ります。ListViewTopLayerScrollableViewListViewScrollViewWebView

たとえば、TopLayerがインスタンスの場合、スクロールされるのはナビゲーションバーであるため、スクロールしてナビゲーションバーWebViewを操作することはできません(右にシフトしましたが)。 ListViewWebView

多くのを重ね合わせるのは簡単ではないと思いますScrollableViewが、これらの問題を克服するためのハックがあることを願っています。

ご協力いただきありがとうございます!

編集

ちなみに、これは私が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

私のアプリ-AndroidUIPatterns(https://play.google.com/store/apps/details?id=com.groidify.uipatterns)によると、Facebookのナビゲーションとアニメーションの2つのサンプル実装があります。これは次のとおりです。

うまくいったら試してみてください。

于 2012-04-12T15:34:52.400 に答える
1

ScrollableViewこの問題はs の重ね合わせなどによるものではなく、 TranslateAnimationを使用すると、アニメーション ビューの論理位置 (つまり、視覚的ではない) が依然として元の位置にバインドされていることが原因であることが判明しました。ContentViewそのため、ナビゲーションの項目をクリックしていると思ったら、実際には移動したと思っていた とやり取りしていました。

現在、この問題を修正するObjectAnimatorを使用しており、非常にうまく機能しています。私は Pre-Honeycomb デバイスとの互換性を保証する必要があるだけです (私はこの件に関してNineOldAndroidsを使用することを考えています。誰かが古いアニメーション API を使用してこれを適切に修正する他の方法を知っている場合は、この質問に自由に答えてください)。

于 2012-05-09T12:45:43.723 に答える