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

OSCHINA-MIRROR/ouyangfeng-Android_Slide_To_Close

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_SUPPORT.md 22 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.03.2025 03:20 ee8f292

Змея

Последняя версия

Модуль snake snake-compiler snake-annotations
Последняя версия Скачать Скачать Скачать

Описание особенностей

  • Поддерживает одновременно Activity, Fragment, WebView
  • Простое использование, без вторжения в код
  • Гибкая конфигурация, удовлетворяет различные бизнес-потребности
  • Совместим с SDK Version >= 14 для всех устройств, без побочных эффектов

Демо для скачивания и тестирования

Сканирование QR-кода для загрузки

Сканируйте QR-код выше или нажмите здесь для загрузки

Журнал обновлений

Инструкции по использованию

  1. Добавьте зависимости``` dependencies { // В более новых версиях Gradle можно использовать implementation вместо compile // x.x.x представляет последнюю версию модуля из таблицы выше compile 'com.youngfeng.android:snake:x.x.x' annotationProcessor 'com.youngfeng.android:snake-compiler:x.x.x' }

**Примечание:** если вы используете Kotlin, замените `annotationProcessor` на `kapt`.

2) Инициализируйте **Snake** в классе **Application**

public class SnakeApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();

    // Инициализация Snake
    Snake.init(this);
}

}


## Шаги интеграции Activity
Добавьте аннотацию **@EnableDragToClose** в класс Activity, где требуется включить возможность свайпа для закрытия.

@EnableDragToClose() public class FirstActivity extends Activity



## Шаги интеграции Fragment
### Метод 1: Динамическое конфигурирование
1. В классах Fragment, где требуется включить возможность свайпа для закрытия, добавьте аннотацию **@EnableDragToClose**

@EnableDragToClose() public class FirstFragment extends Fragment {


2. При переходе на текущий **Fragment**, если ваш класс Fragment наследуется от **android.app.Fragment**, используйте **Snake.newProxy(xx.class)** для создания экземпляра Fragment.

Если же ваш класс Fragment наследуется от **android.support.v4.app.Fragment**, используйте **Snake.newProxySupport(xx.class)** для создания экземпляра Fragment.


3. В **Fragment** может отсутствовать метод конструктора по умолчанию. Либо вы использовали несколько конструкторов. В этом случае можно использовать **PrimaryConstructor** для указания основного конструктора.```
@EnableDragToClose()
public class FirstFragment extends Fragment {

    @PrimaryConstructor
    public FirstFragment(int x, int y) {

    }

    ...
}

При использовании основного конструктора, при создании экземпляра с помощью Snake.newProxy вам потребуются параметры конструктора. Например:

FirstFragment fragment = Snake.newProxy(FirstFragment.class, OnClickListener.class, 1, 2);

Для Snake.newProxySupport аналогично.

Метод 2: Использование наследования

Измените родительский класс вашего Fragment согласно следующим соотношениям, чтобы завершить интеграцию слайдового закрытия:

  • android.app.Fragment => com.youngfeng.snake.app.Fragment
  • android.support.v4.app.Fragment => com.youngfeng.snake.support.v4.app.Fragment

Различия между двумя способами интеграции

Способ интеграции newProxy/newProxySupport Использование наследования
Инвазивность Нет Изменение верхнего уровня родительского класса
Простота использования Более сложный Проще
Обработка анимации Требует самостоятельной обработки Обработка не требуется
Создание экземпляров Обязательно использование интерфейсов newProxy/newProxySupport Можно самостоятельно обрабатывать

Замечание: При использовании метода наследования для интеграции, все оригинальные API остаются доступными. Вы можете выбрать использовать API Snake для управления свайпом или использовать методы родительских классов для управления свайпом, что зависит от вас. Даже создание экземпляров вы можете доверить интерфейсу newProxy/newProxySupport.Рекомендация: Если ваш проект имеет единые правила программирования и аккуратный код, рекомендуется использовать метод наследования для интеграции. Если же проект менее организован и не имеет единого стиля, рекомендуется использовать newProxy/newProxySupport, так как это более гибкий подход. ## Настройка параметров свайпа

Обычно после выполнения вышеописанных шагов вы можете использовать функцию закрытия приложения с помощью свайпа. Однако некоторые пользователи могут захотеть настроить внешний вид свайпа. Не волнуйтесь, Змея предоставляет два способа настройки параметров свайпа.

  • Глобальная настройка параметров свайпа Если вы хотите применять настройки параметров свайпа ко всем страницам, можно использовать файл конфигурации snake.xml, который находится в корневой директории проекта. Я подготовил шаблон конфигурации:```xml
false false 2000 false #00000000 #50000000 false true ```Измените параметры шаблона, скопируйте текущий xml-файл и поместите его в папку **assets** основной части вашего проекта. Имя файла должно остаться **snake.xml**, его нельзя менять!
  • Настройка параметров для одной страницы Если вы хотите настроить параметры свайпа только для одной страницы, используйте аннотацию @SetDragParameter:
@EnableDragToClose()
@SetDragParameter(minVelocity = 2000, hideShadowOfEdge = false)
public class FirstActivity extends Activity

Описание других методов

Snake.enableDragToClose(): Если вам нужно динамически включать или отключать возможность закрытия приложения с помощью свайпа, используйте этот метод.

Snake.addDragListener() : Если вы хотите выполнять какие-либо дополнительные действия во время прокрутки, можно использовать этот интерфейс для прослушивания всего процесса прокрутки.

Snake.setCustomTouchInterceptor : Если в ходе использования возникают конфликты при прокрутке, вы можете использовать этот интерфейс для создания пользовательского перехватчика. Примечание: В большинстве случаев вам не потребуется обращаться к этому интерфейсу. Если вы уверены, что требуется решение проблемы конфликтов при прокрутке, используйте этот интерфейс.

Snake.dragToCloseEnabled() : Если вам нужно узнать, активирован ли режим закрытия через прокрутку на текущей странице, используйте этот интерфейс.```markdown Snake.enableSwipeToHome(): Если вы хотите активировать функцию перехода на главный экран через свайп снизу вверх на определенной странице, используйте этот интерфейс. ````Snake.swipeUpToHomeEnabled()` : Получает состояние активации функции выхода на главный экран через прокрутку снизу вверх на текущей странице.

Обработка анимации

На этом этапе вы успешно интегрировали функцию закрытия через прокрутку и узнали, как настраивать параметры этой функции. Однако вы заметите, что если использовать системную кнопку "Назад", анимация Activity может отличаться от анимации закрытия через прокрутку, что делает её несоответствующей. Кроме того, Fragment продолжает воспроизводить анимацию после закрытия через прокрутку, что выглядит странно.

Поэтому Snake предлагает несколько различных вариантов реализации анимации, чтобы она была согласована с анимацией закрытия через прокрутку.

  • R.anim.snake_slide_in_left.xml : Вход слева
  • R.anim.snake_slide_in_right.xml : Вход справа
  • R.anim.snake_slide_out_left.xml : Выход слева
  • R.anim.snake_slide_out_right.xml : Выход справа
  • R.animator.snake_slide_in_left.xml : Вход слева
  • R.animator.snake_slide_in_right.xml : Вход справа
  • R.animator.snake_slide_out_left.xml : Выход слева
  • R.animator.snake_slide_out_right.xml : Выход справа

Для конкретного применения этих анимаций обратитесь к конфигурации демо.

Используя эти настройки анимации при запуске и завершении Activity, вы сможете решить проблему несоответствия анимации закрытия через прокрутку. Однако проблема повторного воспроизведения анимации Fragment всё ещё существует. Чтобы сделать Fragment согласованным, вам также потребуется выполнить следующую работу:```markdown

Переопределение методов анимации

@Override
public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
    return Snake.wrap(super.onCreateAnimator(transit, enter, nextAnim), this);
}

@Override
public void disableAnimation(boolean disable) {
    mDisableAnimation = disable;
}

@Override
public boolean animationDisabled() {
    return mDisableAnimation;
}

Внимание: переопределяйте метод onCreateAnimator или onCreateAnimation, используя метод Snake.wrap. В противном случае это может привести к неправильной работе.

Управление скроллом в WebView

Если вы хотите активировать управление скроллом в WebView, замените ваш класс WebView на SnakeWebView. На данный момент поддерживаются быстрое свайпание влево для перемещения вперед и быстрое свайпание вправо для перемещения назад.

Лучшие практики

  1. Запуск Activity является затратным процессом. Для лучшего пользовательского опыта рекомендуется использовать дизайн с использованием Fragment или Activity + нескольких Fragment. Кроме того, из-за совместимости Android системы, закрытие Activity при SDK версиях ниже 21 будет осуществляться через быстрый свайп вправо. Лишь при версиях выше 21 можно использовать связывающийся способ свайпа для закрытия.

```markdown
## Переопределение методов анимации

```java
@Override
public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
    return Snake.wrap(super.onCreateAnimator(transit, enter, nextAnim), this);
}

@Override
public void disableAnimation(boolean disable) {
    mDisableAnimation = disable;
}

@Override
public boolean animationDisabled() {
    return mDisableAnimation;
}

Внимание: переопределяйте метод onCreateAnimator или onCreateAnimation, используя метод Snake.wrap. В противном случае это может привести к неправильной работе.

Управление скроллом в WebView

Если вы хотите активировать управление скроллом в WebView, замените ваш класс WebView на SnakeWebView. На данный момент поддерживаются быстрое свайпание влево для перемещения вперед и быстрое свайпание вправо для перемещения назад.

Лучшие практики

  1. Запуск Activity является затратным процессом. Для лучшего пользовательского опыта рекомендуется использовать дизайн с использованием Fragment или Activity + нескольких Fragment. Кроме того, из-за совместимости Android системы, закрытие Activity при SDK версиях ниже 21 будет осуществляться через быстрый свайп вправо. Лишь при версиях выше 21 можно использовать связывающийся способ свайпа для закрытия. ```2) Рекомендуется использовать аннотацию @EnableDragToClose в базовых классах Activity и Fragment для избежания повторного использования аннотации в каждом подклассе. Также рекомендуется выполнять управление Activity в родительском классе.

  2. Недопустимо создавать собственные настройки стилей свайпов. По умолчанию стиль уже достаточно красив, а сложные дизайнерские решения могут мешать пониманию.

  3. При возникновении проблем, пожалуйста, просмотрите Wiki, возможно, там есть ответы на ваши вопросы. Если нет, пожалуйста, присоединитесь к QQ-общению группе 288177681, чтобы сообщить о проблеме.

  4. Хотя использование без установки прозрачности окна также возможно, всё же рекомендуется вручную установить прозрачность окна для получения лучшего опыта. Конкретные шаги: скопируйте следующие свойства и добавьте их в конфигурацию темы вашего файла styles.xml.

<item name="android:windowIsTranslucent">true</item>

Настройка ProGuard

# Если правило уже применено, повторное указание не требуется
-keepattributes *Annotation*
-keep class **.*_SnakeProxy
-keep @com.youngfeng.snake.annotations.EnableDragToClose public class *

Отслеживание новостей Snake, подписывайтесь на студию Оуян Фэн

Студия Оуян Фэн

**QQ-группа**: 288177681```Если вы столкнулись с какими-либо проблемами во время использования, присоединяйтесь к группе для обсуждения. Если вы хотите поддержать автора, нажмите кнопку звездочки вверху.

ПС: Если вы используете **Snake** в продукте, напишите мне! Адрес электронной почты: **626306805@qq.com**, большое спасибо!

Лицензия
===
    Copyright 2018 Ouyangfeng Office

    Лицензировано по лицензии Apache License, Версия 2.0 («Лицензия»); 
    вы можете использовать этот файл только в соответствии с Лицензией. 
    Вы можете получить копию Лицензии по адресу

        http://www.apache.org/licenses/LICENSE-2.0

    Кроме случаев, когда это требуют применимое законодательство или письменное соглашение, программное обеспечение, 
    распространяемое по Лицензии, предоставляется «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ И УСЛОВИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАННЫХ. 
    Смотрите Лицензию для конкретного языка, регламентирующего права и ограничения по Лицензии.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/ouyangfeng-Android_Slide_To_Close.git
git@api.gitlife.ru:oschina-mirror/ouyangfeng-Android_Slide_To_Close.git
oschina-mirror
ouyangfeng-Android_Slide_To_Close
ouyangfeng-Android_Slide_To_Close
master