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

OSCHINA-MIRROR/heyclock-CommonPopupWindow

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

CommonPopupWindow

Популярное всплывающее окно на рынке, с возможностью кастомизации.

Скачать Скачать

(Android универсальное всплывающее окно — сочетание популярных стилей всплывающих окон на рынке + поддержка пользовательских макетов — вопросы/требования см. Issue).

Описание

Для использования библиотеки poplibrary достаточно вызвать всплывающее окно.

(Другие настройки будут продолжены)

Особенности

Поддержка пользовательских макетов (все события кликов унифицированы и возвращают обратный вызов)

Всплывающие окна нижнего уровня — сочетание популярных стилей (в настоящее время доступны два основных стиля, если необходимо добавить, пожалуйста, issue)

Регистрация и вход в систему — базовый стиль всплывающего окна (для входа можно настроить отображение различных комбинаций стилей)

Обновление всплывающего окна (текущий классический стиль)

На основе обновления всплывающего окна + Rx семейства App модуль обновления 1.14.0 (включает только пользовательский 1.0.1 + обновление всплывающего окна 1.0.4) (завершение первой версии)

Добавление вертикального списка всплывающих окон (анимация расширения и сжатия сверху вниз)

Добавление предупреждающих всплывающих окон (в настоящее время добавлен классический стиль A)

Добавление собственных предупреждающих всплывающих окон

Добавление всплывающих окон выбора региона

Добавление содержимого Webview во всплывающем окне

Добавление комментариев во всплывающем окне

Вертикальный список/всплывающее окно выбора региона

Однократное всплывающее окно

Интеграция обновления приложения

Всплывающее окно камеры/фотоальбома

Эффект

Общий эффект

Пользовательские макеты Всплывающие окна для обмена Регистрация и вход Обычное обновление всплывающего окна
Пользовательские макеты Всплывающие окна для обмена Регистрация и вход Обычное обновление всплывающего окна
Модуль обновления приложения Вертикальный список всплывающих окон Предупреждающие всплывающие окна Собственные предупреждающие всплывающие окна
Модуль обновления приложения Вертикальный список всплывающих окон Предупреждающие всплывающие окна Собственные предупреждающие всплывающие окна
Выбор региона Исходный стиль обновления приложения Содержимое Webview во всплывающем окне Комментарии во всплывающем окне
Выбор региона Исходный стиль обновления приложения Содержимое Webview во всплывающем окне Комментарии во всплывающем окне
Вертикальные списки/выбор региона Однократные всплывающие окна Модуль обновления приложения Фотоальбом камеры
Вертикальные списки/выбор региона Однократные всплывающие окна Модуль обновления приложения Фотоальбом камеры
**Импорт библиотеки**

Для gradle:

//自定义布局(下面有API、使用说明) - 需要基于basepop自定义就是用这个吧!
implementation 'com.hl:poplibrary:1.1.1'

//Интеграция всех окон сообщений + модуль обновления приложения, больше не поддерживается отдельно
implementation 'com.hl:poplibrary:3.0.0'

История:

//Модуль обновления приложения - пользовательский стиль окна сообщений + оригинальный стиль окна сообщения обновления
implementation 'com.hl:poplibrary:1.14.1'
//Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса A + оригинальное окно сообщения + окно выбора региона + окно содержимого Webview + окно комментариев + использование вертикального окна списка/окна выбора региона
implementation 'com.hl:poplibrary:2.1.4'
//Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса А + оригинальное окно сообщения + окно выбора региона + окно содержимого Webview + окно комментариев
implementation 'com.hl:poplibrary:2.0.8'
//Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса А + оригинальное окно сообщения + окно выбора региона + окно содержимого Webview
implementation 'com.hl:poplibrary:2.0.6'
//Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса А + оригинальное окно сообщения + окно выбора региона
implementation 'com.hl:poplibrary:2.0.3'
//Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса А + оригинальное окно сообщения
implementation 'com.hl:poplibrary:2.0.2'
//2.0.1 Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка + окно предупреждения класса А
implementation 'com.hl:poplibrary:2.0.1'
//2.0.0 Пользовательский макет + окно сообщений для обмена + окно регистрации и входа + окно обновления + вертикальное окно списка
implementation 'com.hl:poplibrary:2.0.0'

//Модуль обновления приложения — пользовательский стиль окна сообщений
implementation 'com.hl:poplibrary:1.14.0'
//Больше не будет разделяться на несколько версий для итеративного обновления
//1.0.2 Пользовательский + обмен сообщениями
//implementation 'com.hl:poplibrary:1.0.2'
//1.0.3 Пользовательский + обмен сообщениями + регистрация и вход
//implementation 'com.hl:poplibrary:1.0.3'
//1.0.4 Пользовательский + обмен сообщениями + регистрация и вход + обновление
//implementation 'com.hl:poplibrary:1.0.4'
//1.0.6.1 Пользовательский + обмен сообщениями + регистрация и вход + обновление + вертикальное окно списка + добавление масштабируемой анимации отображения - следующая версия будет объединена и усовершенствована в одну версию!
//implementation 'com.hl:poplibrary:1.0.6.1'
//1.0.6.2 Пользовательский + обмен сообщениями + регистрация и вход + обновление + вертикальное окно списка + окно предупреждений класса А
//implementation 'com.hl:poplibrary:1.0.6.3'

Или в maven:

<dependency>
    <groupId>com.hl</groupId>
    <artifactId>poplibrary</artifactId>
    <version>x.x.x</version>
    <type>pom</type>
</dependency>

Передача

API

Введение в класс вызова (основное внимание уделяется базовому классу макета BasePopView)
+BasePopView и SharePopView являются основными классами вызовов, которые обеспечивают определённую инкапсуляцию для создания и отображения
+В то же время они также предоставляют ориентацию, анимацию и свойства мониторинга ключевых классов

Ориентация дисплея
Ориентация делится на две категории:
a. Один основан на ориентации щелчка по элементу управления
b. Другой — это просто центральное расположение вверх-вниз и влево-вправо

 /**
      * Ориентация дисплея на основе элемента управления
      */
     public enum GRAVITY {
         LEFTTOP_TO_LEFTBOTTOM, LEFTTOP_TO_RIGHTBOTTOM,
         LEFTTOP_TO_LEFTTOP, LEFTTOP_TO_RIGHTTOP,
         RIGHTTOP_TO_LEFTBOTTOM, RIGHTTOP_TO_RIGHTBOTTOM,
         RIGHTTOP_TO_RIGHTTOP, RIGHTBOTTOM_TO_LEFTTOP,
         RIGHTBOTTOM_TO_RIGHTTOP, LEFTBOTTOM_TO_RIGHTTOP,
         LEFTBOTTOM_TO_LEFTTOP
     }
 
     /**
      * Простая ориентация вверх-вниз влево-вправо в центре
      */
     public enum SIMPLE_GRAVITY {
         CENTER_IN_PARENT, FROM_BOTTOM, FROM_TOP,
         FROM_LEFT, FROM_RIGHT
     }

Анимация
Можно настроить анимацию SCALE для ориентации на основе элементов управления
Можно установить анимацию перемещения для простой ориентации вверх-вниз влево-вправо Другие ситуации: анимация не будет работать

/**
 * Отображение анимации
 */
public enum ANIMATION {
    NONE, SCALE, TRANSLATE
}

Вызов интерфейса

  1. Пользовательский способ всплывающего окна — предоставляется класс вызова BasePopView.java
/**
* Передача соответствующих параметров для создания и отображения окна
* @param _context 【обязательно】
* @param _anchor 【обязательно】
* @param _layoutResId 【обязательно】
* @param _popW не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param _popH не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param bOutsideTouchable 【обязательно】
* @param _backColor - не нужно давать -1
* @param _animation - не нужно давать null
* @param _onClickListenner - не нужно давать null
* @param _gravity 【обязательно】 BasePopView.SIMPLE_GRAVITY
* @return BasePop.Builder
*/
public static BasePop.Builder show(Context _context, View _anchor,
                                  int _layoutResId, int _popW, int _popH,
                                  boolean bOutsideTouchable, int _backColor,
                                  BasePopView.ANIMATION _animation,
                                  BasePopView.OnClickListenner _onClickListenner,
                                  BasePopView.SIMPLE_GRAVITY _gravity){
    return show(_context, _anchor, _layoutResId, _popW, _popH,
            bOutsideTouchable, _backColor, _animation,
            _onClickListenner, null, _gravity);
}
/**
* Передача соответствующих параметров для создания и отображения окна
* @param _context 【обязательно】
* @param _anchor 【обязательно】
* @param _layoutResId 【обязательно】
* @param _popW не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param _popH не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param bOutsideTouchable 【обязательно】
* @param _backColor - не нужно давать -1
* @param _animation - не нужно давать null
* @param _onClickListenner - не нужно давать null
* @param _gravity 【обязательно】 BasePopView.GRAVITY
* @return BasePop.Builder
*/
public static BasePop.Builder show(Context _context, View _anchor,
                                  int _layoutResId, int _popW, int _popH,
                                  boolean bOutsideTouchable, int _backColor,
                                  BasePopView.ANIMATION _animation,
                                  BasePopView.OnClickListenner _onClickListenner,
                                  BasePopView.GRAVITY _gravity){
    return show(_context, _anchor, _layoutResId, _popW, _popH,
            bOutsideTouchable, _backColor, _annotation,
            _onClickListenner, _gravity, null);
}
/**
* Передача соответствующих параметров для создания и отображения окна
* @param _context 【обязательно】
* @param _anchor 【обязательно】
* @param _layoutResId 【обязательно】
* @param _popW не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param _popH не нужно давать < 0 - в этом случае необходимо самостоятельно выполнить обработку адаптивного макета
* @param bOutsideTouchable 【обязательно】
* @param _backColor - не нужно давать -1
* @param _animation - не нужно давать null
* @param _onClickListenner - не нужно давать null
* @param _gravity 【с _sgravity выбрать один】 BasePopView.GRAVITY
* @param _sgravity 【с _gravity выбрать один】 BasePopView.SIMPLE_GRAVITY
* @return BasePop.Builder
*/
private static BasePop.Builder show(Context _context, View _anchor,
                                       int _layoutResId, int _popW, int _popH,
                                       boolean bOutsideTouchable, int _backColor,
                                       BasePopView.ANIMATION _animation,
                                       BasePopView.OnClickListenner _onClickListenner,
                                       BasePopView.GRAVITY _gravity, BasePopView.SIMPLE_GRAVITY _sgravity){
}
  1. Всплывающее окно для обмена — предоставляется вызывающий класс SharePopView.java

В настоящее время предоставляются два вида отображения

/**
* Тип всплывающего окна для обмена
* ME - собственный
* TENCENT - имитация Tencent
*/
public enum SHARE_TYPE{
    ME, F_TENCENT
}

Список для обмена предоставляет горизонтальный скользящий + тип сетки

/**
* Режим отображения списка для обмена
* HORIZON - горизонтальное скольжение Item's Count > 5
* GRID - сетка 5 столбцов
*/
public enum SHOW_TYPE{
    HORIZON, GRID
}

Метод отображения вызова

/**
* Отображение всплывающего окна для обмена - по умолчанию больше 5 элементов можно скользить влево и вправо
* @param _context
* @param _achor
* @param _share2Name - если передать null, по умолчанию предоставить круг друзей, WeChat, QQ, Sina, скопировать ссылку
* @param _share2Icon
* @param _simple_gravity - поддерживает отображение снизу вверх и сверху вниз
* @param _show_type
* @param _onShareClickListenner
``` ```
    public static BasePop.Builder showShare(Context _context, View _achor,
                                 List<String> _share2Name, List<Integer> _share2Icon,
                                 BasePopView.SIMPLE_GRAVITY _simple_gravity,
                                 SharePopView.SHOW_TYPE _show_type,
                                 OnEventListenner.OnShareClickListenner _onShareClickListenner){
        return new Builder(_context)
                .create(_achor, SHARE_TYPE.ME)
                .setTitleAndIcon(_share2Name, _share2Icon)
                .showShareBorder(_simple_gravity, _show_type, _onShareClickListenner);
    }

    /**
     * 显示分享弹窗 - 默认大于5个方可左右滑动
     * @param _context
     * @param _achor
     * @param _share2Name- 如果传null,默认提供朋友圈、微信、qq、新浪、复制链接
     * @param _share2Icon
     * @param _simple_gravity- 支持从下到上以及从上到下显示方式
     * @param _show_type
     * @param _onShareClickListenner
     * @return
     */
    public static BasePop.Builder showShareFTencent(Context _context, View _achor,
                                            List<String> _share2Name, List<Integer> _share2Icon,
                                            BasePopView.SIMPLE_GRAVITY _simple_gravity,
                                            SharePopView.SHOW_TYPE _show_type,
                                            OnEventListenner.OnShareClickListenner _onShareClickListenner){
        return new Builder(_context)
                .create(_achor, SHARE_TYPE.F_TENCENT)
                .setTitleAndIcon(_share2Name, _share2Icon)
                .showShareBorder(_simple_gravity, _show_type, _onShareClickListenner);
}
3.后续新的功能的用法,请移步传送门

USE

--> 自定义方式

a. 基于控件(achor_view)右下角显示

 // BasePopView.ANIMATION animation可以传null或者BasePopView.NONE
 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 2, 500,
              BasePopView.ANIMATION.SCALE, null,
              BasePopView.GRAVITY.LEFTTOP_TO_RIGHTBOTTOM);

b. 基于控件(achor_view)左下角显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 2, 500,
              BasePopView.ANIMATION.SCALE, null,
              BasePopView.GRAVITY.RIGHTTOP_TO_LEFTBOTTOM);

c. 基于控件(achor_view)右上角显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 2, 500,
              BasePopView.ANIMATION.SCALE, null,
              BasePopView.GRAVITY.LEFTBOTTOM_TO_RIGHTTOP);

d. 基于控件(achor_view)左上角显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 2, 500,
              BasePopView.ANIMATION.SCALE, null,
              BasePopView.GRAVITY.RIGHTBOTTOM_TO_LEFTTOP);

e. 居中显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 2, 500,
              BasePopView.ANIMATION.SCALE, null,
              BasePopView.SIMPLE_GRAVITY.CENTER_IN_PARENT);

f. 从上往下平移显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this), 500,
              BasePopView.ANIMATION.TRANSLATE, null,
              BasePopView.SIMPLE_GRAVITY.FROM_TOP);

g. 从下往上平移显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this), 500,
              BasePopView.ANIMATION.TRANSLATE, null,
              BasePopView.GRAVITY.FROM_BOTTOM);

h. 从左往右平移显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 4, ScreenUtil.getScreenH(this),
              BasePopView.ANIMATION.TRANSLATE, null,
              BasePopView.GRAVITY.FROM_LEFT);

i. 从右往左平移显示

 BasePopView.show(this,
              view, R.layout.activity_pop,
              ScreenUtil.getScreenW(this) / 4, ScreenUtil.getScreenH(this),
              BasePopView.ANIMATION.TRANSLATE, null,
              BasePopView.GRAVITY.FROM_RIGHT);
``` **Другие способы использования: перейдите по ссылке**

# ATTENTION 
>Animation:  
1. На основе ориентации элемента управления (GRAVITY)  анимация перемещения не работает  
2. На основе простого перемещения вверх-вниз, влево-вправо (SIMPLE_GRAVITY)  масштабирование не работает  
3. Центрированное отображение  только центрированная анимация масштабирования  
4. Можно передать null, если анимация не нужна  
5. Обратите внимание на параметры настройки ширины и высоты (есть проблемы, которые нужно доработать)    
```Java
        /**
         * Устанавливает ширину и высоту. 0 означает, что содержимое будет обёрнуто, -1 означает полный экран. Другие значения означают конкретную ширину и высоту
         *         (width == -1)height -10000 — высота от элемента управления до нижней части экрана
         *         (width == -1)height -20000 — высота от элемента управления до верхней части экрана
         * @param width
         * @param height
         * @return
         */
        public Builder setWidthAndHeight(int width, int height) {
            if (width == 0 && height == 0) {
                ///< Если ширина и высота не установлены, по умолчанию используется WRAP_CONTENT
                basePop.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
                basePop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            } else if (width == -1 && height == -1) {
                basePop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
                basePop.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
            }else if (width > 0 && height == 0) {
                basePop.setWidth(width);
                basePop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            }else if (width == -1 && height == 0) {
                basePop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
                basePop.setHeight(ViewGroup.LayoutParams.WRAP_CONTEN
            }else if (width > 0 && height == -1) {
                basePop.setWidth(width);
                basePop.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
            }else if (width == -1 && height == -10000) {    ///< Высота от элемента управления до нижней части экрана
                int achorH = viewWeakReference.get().getMeasuredHeight();
                int screenH = ScreenUtil.getScreenH(contextWeakReference.get());
                int[] achorLocation = new  int[2] ;
                viewWeakReference.get().getLocationInWindow(achorLocation);
                basePop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
                basePop.setHeight(screenH - achorLocation[1] - achorH - 1);
            }else if (width == -1 && height == -20000) {    ///< Высота от элемента управления до верхней части экрана
                int[] achorLocation = new  int[2] ;
                viewWeakReference.get().getLocationInWindow(achorLocation);
                basePop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
                basePop.setHeight(achorLocation[1]);
            }
            else {
                basePop.setWidth(width);
                basePop.setHeight(height);
            }
            return this;
        }

Другая логика

После вызова BasePopView.show можно сохранить BasePop.Builder для удобства обработки логики исчезновения и т. д.; например, в демонстрационном проекте

    /**
     * Тест отображения всплывающего окна
     *
     * @param view
     */
    public void testPop(View view) {
        ///< Повторное отображение при уже открытом окне
        if (null != builder && builder.bIsShowing()) {
            builder.dissmiss();///< Или return, чтобы предотвратить повторное отображение
        }

        ///< Запуск события клика
        OnEventListenner.OnBaseClickListenner onClickListenner = new OnEventListenner.OnBaseClickListenner() {
               @Override
               public void onClick(View view) {
                    if (view.getId() == R.id.ap_leftBtn ||
                            view.getId() == R.id.ap_rightBtn) {
                            builder.dissmiss();
                        }
                    }
        };
        switch (view.getId()) {
           case R.id.am_lefttop_btn:           ///< Achor правый нижний угол с масштабированием
                builder = BasePopView.show(this,
                          view, R.layout.activity_pop,
                           ScreenUtil.getScreenW(this) / 2, 500,
                           BasePopView.ANIMATION.SCALE, onClickListenner,
                           BasePopView.GRAVITY.LEFTTOP_TO_RIGHTBOTTOM);
           break;
           ///....Другие способы
        }
    }

Комментарии ( 0 )

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

Введение

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

Обновления

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

Участники

все

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

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