Как правильно наложить 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, это:
- Android-слайд-меню-демо: https://github.com/gitgrimbo/android-sliding-menu-demo
- GUI-скользящая боковая панель: https://github.com/walkingice/gui-sliding-sidebar
Можете ли вы попробовать, если это работает.