Как правильно наложить ScrollableViews в Android

Для реализации панели навигации аля 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>

Поэтому основная идея заключается в том, что когда я хочу открыть панель навигации, я просто сдвигаю верхний слой вправо, и панель навигации будет открыта. Теперь это работает хорошо, и я могу взаимодействовать с навигацией ListView для того, чтобы перемещаться по приложению, насколько представление, которое вводится внутри TopLayerне является ScrollableView(как другой ListView, ScrollViewили WebView).

Например, когда TopLayerэто WebViewНапример, я не могу прокручивать и взаимодействовать с панелью навигации ListViewпотому что это WebViewэто прокручивается (хотя я сдвинул его вправо).

Я думаю, это не тривиально, чтобы наложить много ScrollableViewНо я надеюсь, что есть проблемы, чтобы преодолеть эти проблемы.

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ

Кстати, вот как я сдвигаю TopLayerпредставление (используя TranslateAnimation):

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

2 ответа

Решение

Оказывается, проблема была не в наложении ScrollableView s или что-нибудь, кроме того факта, что при использовании TranslateAnimation логическая позиция (то есть: не визуальная) анимированного представления по-прежнему привязана к своей исходной позиции. Таким образом, когда я думал, что нажимаю на элемент навигации, я фактически взаимодействовал с ContentView что я думал переехал.

Теперь я использую ObjectAnimator, который исправляет эту проблему, и она работает очень хорошо. Мне нужно только обеспечить совместимость с устройствами перед сотовой разверткой (я думаю об использовании NineOldAndroids для этого вопроса. Если кто-то знает какую-либо другую альтернативу, чтобы исправить это должным образом, используя старый API-интерфейс анимации, смело отвечайте на этот вопрос).

Согласно моему приложению - шаблонам пользовательского интерфейса Android (https://play.google.com/store/apps/details?id=com.groidify.uipatterns), есть 2 примера реализации навигации и анимации Facebook, это:

Можете ли вы попробовать, если это работает.

Другие вопросы по тегам