1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hewaiming-AndroidSlidingUpPanel

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Android Sliding Up Panel

Эта библиотека предоставляет простой способ добавить в ваше Android-приложение перетаскиваемую скользящую вверх панель (популярную благодаря Google Music и Google Maps).

Как видно в приложении Umano для Android (теперь приобретённом Dropbox):

SlidingUpPanelLayout

Известные случаи использования в популярных приложениях

Если вы используете библиотеку и хотите, чтобы ваше приложение было включено в этот список, просто дайте нам знать.

Импорт библиотеки

Просто добавьте следующую зависимость в файл 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+

Другие участники

  • 23 ноября 15 — @kiyeonk — поддержка umanoScrollInterpolator
  • 21 января 14 — ChaYoung You (@yous) — поддержка скольжения сверху
  • 20 августа 13 — @gipi — Поддержка Android Studio
  • 24 июля 13 — Philip Schiffer (@hameno) — Поддержка Maven
  • 20 октября 13 — Irina Preșa (@iriina) — Поддержка привязки
  • 1 декабря 13 — (@youchy) — Поддержка XML-атрибутов
  • 22 декабря 13 — Владимир Миронов (@MironovNsk) — Пользовательская высота расширенной панели

Если у вас есть потрясающий запрос на включение, отправьте его!

Журнал изменений

  • 3.3.1

    • Множество исправлений ошибок из различных запросов на включение.
    • Убрана зависимость от nineoldandroids. Вместо этого используйте ViewCompat.
  • 3.3.0

    • Теперь вы можете установить FadeOnClickListener для случая, когда область основного контента, которая исчезает, нажата.
    • PanelSlideListener имеет новый формат (теперь можно установить несколько таких слушателей).
    • Исправлена ошибка с setTouchEnabled.
  • 3.2.1

    • Добавлена поддержка umanoScrollInterpolator.
    • Добавлена поддержка процентной высоты скользящей панели с использованием атрибута layout_weight.
    • Добавлен ScrollableViewHelper, позволяющий пользователям расширять поддержку новых типов прокручиваемых видов.
  • 3.2.0

    • Переименовать umanoParalaxOffset в umanoParallaxOffset.
    • Поддержка RecyclerView.
  • 3.1.0

    • Добавлено... Умано скроллэйбл вью для поддержки вложенной прокрутки у детей (на данный момент поддерживаются только скроллвью и листвью)
  • 3.0.0

    • Добавлен префикс умано для всех атрибутов.
    • Добавлен атрибут клип пэнэл для поддержки прозрачных панелей в режиме без оверлея.
    • setEnabled(false) — теперь полностью отключает скользящую панель (сенсорное и программное скольжение).
    • setTouchEnabled(false) — отключает сенсорную реакцию панели (перетаскивание и нажатие), вы всё ещё можете управлять панелью программно.
    • getPanelState — теперь единственный метод получения текущего состояния панели.
    • setPanelState — теперь единственный способ изменить состояние панели из кода.
  • 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hewaiming-AndroidSlidingUpPanel.git
git@api.gitlife.ru:oschina-mirror/hewaiming-AndroidSlidingUpPanel.git
oschina-mirror
hewaiming-AndroidSlidingUpPanel
hewaiming-AndroidSlidingUpPanel
master