Модуль | snake | snake-compiler | snake-annotations |
---|---|---|---|
Последняя версия |
Сканируйте QR-код выше или нажмите здесь для загрузки
**Примечание:** если вы используете 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 аналогично.
Измените родительский класс вашего 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, так как это более гибкий подход. ## Настройка параметров свайпа
Обычно после выполнения вышеописанных шагов вы можете использовать функцию закрытия приложения с помощью свайпа. Однако некоторые пользователи могут захотеть настроить внешний вид свайпа. Не волнуйтесь, Змея предоставляет два способа настройки параметров свайпа.
@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
на SnakeWebView
. На данный момент поддерживаются быстрое свайпание влево для перемещения вперед и быстрое свайпание вправо для перемещения назад.
```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
на SnakeWebView
. На данный момент поддерживаются быстрое свайпание влево для перемещения вперед и быстрое свайпание вправо для перемещения назад.
Запуск Activity является затратным процессом. Для лучшего пользовательского опыта рекомендуется использовать дизайн с использованием Fragment или Activity + нескольких Fragment. Кроме того, из-за совместимости Android системы, закрытие Activity при SDK версиях ниже 21 будет осуществляться через быстрый свайп вправо. Лишь при версиях выше 21 можно использовать связывающийся способ свайпа для закрытия.
```2) Рекомендуется использовать аннотацию @EnableDragToClose
в базовых классах Activity и Fragment для избежания повторного использования аннотации в каждом подклассе. Также рекомендуется выполнять управление Activity в родительском классе.
Недопустимо создавать собственные настройки стилей свайпов. По умолчанию стиль уже достаточно красив, а сложные дизайнерские решения могут мешать пониманию.
При возникновении проблем, пожалуйста, просмотрите Wiki, возможно, там есть ответы на ваши вопросы. Если нет, пожалуйста, присоединитесь к QQ-общению группе 288177681, чтобы сообщить о проблеме.
Хотя использование без установки прозрачности окна также возможно, всё же рекомендуется вручную установить прозрачность окна для получения лучшего опыта. Конкретные шаги: скопируйте следующие свойства и добавьте их в конфигурацию темы вашего файла styles.xml
.
<item name="android:windowIsTranslucent">true</item>
# Если правило уже применено, повторное указание не требуется
-keepattributes *Annotation*
-keep class **.*_SnakeProxy
-keep @com.youngfeng.snake.annotations.EnableDragToClose public class *
**QQ-группа**: 288177681```Если вы столкнулись с какими-либо проблемами во время использования, присоединяйтесь к группе для обсуждения. Если вы хотите поддержать автора, нажмите кнопку звездочки вверху.
ПС: Если вы используете **Snake** в продукте, напишите мне! Адрес электронной почты: **626306805@qq.com**, большое спасибо!
Лицензия
===
Copyright 2018 Ouyangfeng Office
Лицензировано по лицензии Apache License, Версия 2.0 («Лицензия»);
вы можете использовать этот файл только в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Кроме случаев, когда это требуют применимое законодательство или письменное соглашение, программное обеспечение,
распространяемое по Лицензии, предоставляется «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ И УСЛОВИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАННЫХ.
Смотрите Лицензию для конкретного языка, регламентирующего права и ограничения по Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )