Android Sliding Up Panel
Эта библиотека предоставляет простой способ добавить в ваше Android-приложение перетаскиваемую скользящую вверх панель (популярную благодаря Google Music и Google Maps).
Как видно в приложении Umano для Android (теперь приобретённом Dropbox):
Если вы используете библиотеку и хотите, чтобы ваше приложение было включено в этот список, просто дайте нам знать.
Просто добавьте следующую зависимость в файл build.gradle
, чтобы использовать последнюю версию:
dependencies {
repositories {
mavenCentral()
}
compile 'com.sothree.slidinguppanel:library:3.3.1'
}
com.sothree.slidinguppanel.SlidingUpPanelLayout
в качестве корневого элемента в макете вашей активности.top
, либо на bottom
.match_parent
.match_parent
, и высоту, установленную либо на match_parent
, wrap_content
, либо на максимальную желаемую высоту. Если вы хотите определить высоту как процент экрана, установите её на match_parent
и также определите атрибут layout_weight
для скользящего представления.setDragView
или атрибута umanoDragView
.Для получения дополнительной информации обратитесь к примеру кода.
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:text="The Awesome Sliding Up Panel"
android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
Для плавного взаимодействия с ActionBar убедитесь, что windowActionBarOverlay
установлено на true
в ваших стилях:
<style name="AppTheme">
<item name="android:windowActionBarOverlay">true</item>
</style>
Однако в этом случае вам, вероятно, потребуется добавить верхний отступ к основному макету размером ?android:attr/actionBarSize
или ?attr/actionBarSize
, чтобы поддерживать старые версии API.
umanoDragView
, панель будет передавать события кликов основному макету. Сделайте второй макет clickable
, чтобы предотвратить это.setPanelHeight
или атрибута umanoPanelHeight
.shadowHeight
равным 0.setEnabled(false)
, чтобы полностью отключить скользящую панель (включая сенсорное управление и программное скольжение).setTouchEnabled(false)
, чтобы отключить чувствительность панели к касаниям. (перевод на русский язык)
(drag and click), вы всё ещё можете управлять панелью программно
getPanelState
, чтобы получить текущее состояние панели.setPanelState
, чтобы установить текущее состояние панели.umanoParallaxOffset
(см. демо для примера).setAnchorPoint
, чтобы разрешить промежуточное расширенное состояние для панели (аналогично Google Maps).PanelSlideListener
для отслеживания событий о скользящих панелях.layout_gravity
макета на top
.umanoScrollInterpolator
. Например, если вы хотите эффект отскока или перерегулирования для панели.setOverlayed
или атрибута umanoOverlay
. Это полезно, если вы хотели бы сделать скользящий макет полупрозрачным. Также можно установить umanoClipPanel
в значение false, чтобы сделать панель прозрачной в режиме без наложения.umanoFadeColor
. Установите его в значение "@android:color/transparent"
, чтобы полностью убрать затемнение.Если у вас есть прокручиваемый вид внутри скользящей панели, обязательно установите атрибут umanoScrollableView
на панели для поддержки вложенной прокрутки. Панель поддерживает ListView
, ScrollView
и RecyclerView
из коробки, но вы можете добавить поддержку любого типа прокручиваемого вида, установив собственный ScrollableViewHelper
. Вот пример для NestedScrollView
:
public class NestedScrollableViewHelper extends ScrollableViewHelper {
public int getScrollableViewScrollPosition(View scrollableView, boolean isSlidingUp) {
if (mScrollableView instanceof NestedScrollView) {
if(isSlidingUp){
return mScrollableView.getScrollY();
} else {
NestedScrollView nsv = ((NestedScrollView) mScrollableView);
View child = nsv.getChildAt(0);
return (child.getBottom() - (nsv.getHeight() + nsv.getScrollY()));
}
} else {
return 0;
}
}
}
После определения вашего помощника вы можете установить его с помощью setScrollableViewHelper
на скользящей панели.
Эта библиотека изначально была основана на открытом исходном коде компонента SlidingPaneLayout
из r13 Android Support Library. Спасибо команде Android!
Протестировано на Android 2.2+
umanoScrollInterpolator
Если у вас есть потрясающий запрос на включение, отправьте его!
3.3.1
3.3.0
FadeOnClickListener
для случая, когда область основного контента, которая исчезает, нажата.PanelSlideListener
имеет новый формат (теперь можно установить несколько таких слушателей).3.2.1
umanoScrollInterpolator
.layout_weight
.ScrollableViewHelper
, позволяющий пользователям расширять поддержку новых типов прокручиваемых видов.3.2.0
umanoParalaxOffset
в umanoParallaxOffset
.3.1.0
3.0.0
2.0.2 — Разрешить wrap_content для атрибута высоты скользящего вида. Исправлены ошибки.
2.0.1 — Исправлены ошибки.
2.0.0 — Очищены различные публичные вызовы методов. Добавлены анимированные методы showPanel/hidePanel.
1.0.1 — Первый выпуск.
Лицензировано под лицензией Apache версии 2.0 («Лицензия»); вы не можете использовать эту работу иначе, чем в соответствии с Лицензией. Вы можете получить копию Лицензии в файле LICENSE или по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения по Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )