Распространение сенсорных событий
Расширение механизма распространения событий dispatchTouchEvent -> onInterceptTouchEvent -> onTouchEvent и реализация метода requestDisallowInterceptTouchEvent.
Внимание
Использование
public class ViewParent extends DirectionalLayout implements Component.TouchEventListener, ViewGroup
setTouchEventListener(this);
@Override
public boolean onTouchEvent(Component component, TouchEvent event) {
return DispatchHelper.dispatch(component, event);
}
ViewGroupHelper impl = new ViewGroupHelper();
@Override
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
impl.requestDisallowInterceptTouchEvent(disallowIntercept);
}
@Override
public boolean onInterceptTouchEvent(TouchEvent ev) {
return false;
}
@Override
public boolean dispatchTouchEvent(TouchEvent event) {
return impl.dispatchTouchEvent(event);
}
@Override
public boolean onTouchEvent(TouchEvent event) {
return false;
}
@Override
public boolean isConsumed() {
return impl.isConsumed();
}
public class ViewChild extends ScrollView implements Component.TouchEventListener, View
setTouchEventListener(this);
@Override
public boolean onTouchEvent(Component component, TouchEvent event) {
return DispatchHelper.dispatch(component, event);
}
ViewHelper impl = new ViewHelper();
@Override
public boolean dispatchTouchEvent(TouchEvent event) {
return impl.dispatchTouchEvent(event);
}
@Override
public boolean onTouchEvent(TouchEvent event) {
return true;
}
@Override
public boolean isConsumed() {
return impl.isConsumed();
}
Если компоненту требуется, чтобы родительский элемент не перехватывал события, можно вызвать метод requestDisallowInterceptTouchEvent DispatchHelper:
DispatchHelper.requestDisallowInterceptTouchEvent(this, false);
// postRequestDisallowInterceptTouchEvent будет использовать EventHandler для задержки выполнения функции
// чтобы избежать ситуации, когда getComponentParent имеет значение null при вызове requestDisallowInterceptTouchEvent в конструкторе
DispatchHelper.postRequestDisallowInterceptTouchEvent(this, false);
Затем зарегистрируйте каждую функцию в журнале и попробуйте изменить значения onInterceptTouchEvent, onTouchEvent родительского элемента и onTouchEvent дочернего элемента, чтобы увидеть результаты в журнале. Также можно попробовать реализовать несколько уровней ViewGroup для достижения более сложных эффектов.
Поскольку распространение событий в ohos происходит в пузырьковой форме, то есть события сначала достигают целевого компонента, и если целевой компонент не потребляет событие, оно всплывает к родительскому компоненту. В то время как в Android события передаются сначала родительскому компоненту, затем распределяются и передаются целевому компоненту. Основная функция DispatchHelper заключается в поиске всех компонентов в дереве представлений, которые реализуют View или ViewGroup, и вызове функции dispatchTouchEvent верхнего уровня для распространения события вниз. Он также фильтрует повторяющиеся события, вызванные всплытием событий. ViewHelper и ViewGroupHelper в основном реализуют логику функций dispatchTouchEvent View и ViewGroup в Android.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )