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

OSCHINA-MIRROR/thoseyears-ohos-extension

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
NestedScrolling.md 5.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 01:25 d5812a8

Вложенный скроллинг

Вложенный скроллинг включает в себя два интерфейса: NestedScrollingChild и NestedScrollingParent, а также два вспомогательных класса: NestedScrollingChildHelper и NestedScrollingParentHelper.

Интерфейсы NestedScrolling объединяют интерфейсы Android NestedScrollingChild1, 2, 3 и NestedScrollingParent1, 2, 3.

Принцип работы

При событии прокрутки дочернего компонента (NestedScrollingChild) сначала проверяется, нужно ли родительскому компоненту (NestedScrollingParent) использовать событие прокрутки и сколько расстояния необходимо использовать. Затем дочерний компонент обрабатывает оставшееся расстояние.

Использование

Использование в целом не отличается от Android, но следует учитывать, что интерфейс NestedScrollingChild обычно уже реализован системными компонентами, и редко требуется его самостоятельная реализация. Это связано с тем, что логика распределения NestedScrollingChild требует вмешательства в логику обработки прокрутки компонентов, и некоторые системные компоненты уже обработали её за нас (например, ScrollView, RecyclerView и т. д.).

Однако в ohos мы не можем переписать события касания системных компонентов, мы можем только установить обратный вызов через setTouchListener. Это означает, что мы не можем вмешиваться в существующую логику обработки прокрутки ohos системных компонентов. Поэтому нам нужно переписать логику прокрутки компонентов (можно использовать класс ScrollHelper) и вызвать методы dispatch серии NestedScrollingChild в подходящее время (конкретная логика реализуется в NestedScrollingChildHelper).

Обратите внимание: все компоненты, реализующие NestedScrollingChild или NestedScrollingParent, должны реализовывать интерфейс View или ViewGroup и механизм распределения событий dispatchTouchEvent.

  • NestedScrollingChild:

    • Используйте логику обработки из класса ScrollHelper и можете использовать его вместе с интерфейсом ScrollingView для реализации более общей логики прокрутки.
  • NestedScrollingParent:

    1. Реализуйте интерфейс View или ViewGroup, обратитесь к разделу «Распределение событий».
    2. Реализуйте интерфейс NestedScrollingParent.
      
      

public class NestedScrollView extends ScrollView implements Component.TouchEventListener, ViewGroup, NestedScrollingParent

    3. В некоторых функциях NestedScrollingParent вызывайте одноимённые функции NestedScrollingParentHelper, а в остальных функциях реализуйте логику по мере необходимости.
        ```
// NestedScrollingParent
@Override
public boolean onStartNestedScroll(Component child, Component target, int axes, int type) {
return true; // Необходимо реализовать логику самостоятельно
}

@Override
public void onNestedScrollAccepted(Component child, Component target, int axes, int type) {
mParentHelper.onNestedScrollAccepted(child, target, axes, type);
}

@Override
public void onStopNestedScroll(Component target, int type) {
mParentHelper.onStopNestedScroll(target, type);
}

@Override
public void onNestedScroll(Component target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, int[] consumed) {
// Необходимо реализовать логику самостоятельно
}

@Override
public void onNestedPreScroll(Component target, int dx, int dy, int[] consumed, int type) {
// Необходимо реализовать логику самостоятельно
}

@Override
public boolean onNestedFling(Component target, float velocityX, float velocityY, boolean consumed) {
// Необходимо реализовать логику самостоятельно
return false;
}

@Override
public boolean onNestedPreFling(Component target, float velocityX, float velocityY) {
// Необходимо реализовать логику самостоятельно
return false;
}

@Override
public int getNestedScrollAxes() {
return mParentHelper.getNestedScrollAxes();
}
4. Для более подробного объяснения вы можете обратиться к другим учебникам по Android.

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

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

1
https://api.gitlife.ru/oschina-mirror/thoseyears-ohos-extension.git
git@api.gitlife.ru:oschina-mirror/thoseyears-ohos-extension.git
oschina-mirror
thoseyears-ohos-extension
thoseyears-ohos-extension
master