Вложенный скроллинг
Вложенный скроллинг включает в себя два интерфейса: 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:
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 )