Skip to content

Commit 02ec7f1

Browse files
authored
fix(scroll-view): android 'isScrollEnabled' will apply if changed while gesture is underway (NativeScript#8695)
1 parent 635f31f commit 02ec7f1

File tree

5 files changed

+35
-2
lines changed

5 files changed

+35
-2
lines changed

e2e/ui-tests-app/app/scroll-view/main-page.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function loadExamples() {
1717
examples.set("safe-area-images", "scroll-view/safe-area-images-page");
1818
examples.set("safe-area-images-overflow", "scroll-view/safe-area-images-overflow-page");
1919
examples.set("layout-outside-scroll", "scroll-view/layout-outside-scroll-page");
20+
examples.set("scroll-enabled", "scroll-view/scroll-enabled-page");
2021

2122
return examples;
2223
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { EventData as ObservableEventData } from "tns-core-modules/data/observable";
2+
import { GestureStateTypes, PanGestureEventData } from "tns-core-modules/ui/gestures";
3+
import { Page } from "tns-core-modules/ui/page";
4+
5+
export function pageLoaded(args: ObservableEventData) {
6+
var page = <Page>args.object;
7+
}
8+
9+
export function panLayout(args: PanGestureEventData)
10+
{
11+
const scrollView = args.object.parent;
12+
13+
if (args.state === GestureStateTypes.began) {
14+
args.object.previousDeltaY = 0;
15+
scrollView.isScrollEnabled = false;
16+
}
17+
else if (args.state === GestureStateTypes.changed) {
18+
const diff = (args.deltaY - args.object.previousDeltaY);
19+
args.object.translateY += diff;
20+
args.object.previousDeltaY = args.deltaY;
21+
}
22+
else if (args.state === GestureStateTypes.ended) {
23+
scrollView.isScrollEnabled = true;
24+
}
25+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" class="page">
2+
<ScrollView id="scroll-view" height="300">
3+
<StackLayout height="500" backgroundColor="red" pan="panLayout">
4+
<Label text="Move Me" color="#fff" fontSize="22"/>
5+
</StackLayout>
6+
</ScrollView>
7+
</Page>

tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {
7070

7171
@Override
7272
public boolean onTouchEvent(MotionEvent ev) {
73-
if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) {
73+
if (!this.scrollEnabled && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE)) {
7474
return false;
7575
}
7676

tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {
7070

7171
@Override
7272
public boolean onTouchEvent(MotionEvent ev) {
73-
if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) {
73+
if (!this.scrollEnabled && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE)) {
7474
return false;
7575
}
7676

0 commit comments

Comments
 (0)