| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -14,7 +14,6 @@ export class ScrollView extends common.ScrollView implements definition.ScrollVi | |||
| 14 | 14 | private _android: org.nativescript.widgets.VerticalScrollView | org.nativescript.widgets.HorizontalScrollView; | |
| 15 | 15 | private _androidViewId: number = -1; | |
| 16 | 16 | private handler: android.view.ViewTreeObserver.OnScrollChangedListener; | |
| 17 | - | ||
| 18 | 17 | get android(): android.view.ViewGroup { | |
| 19 | 18 | return this._android; | |
| 20 | 19 | } | |
@@ -111,20 +110,36 @@ export class ScrollView extends common.ScrollView implements definition.ScrollVi | |||
| 111 | 110 | var that = new WeakRef(this); | |
| 112 | 111 | this.handler = new android.view.ViewTreeObserver.OnScrollChangedListener({ | |
| 113 | 112 | onScrollChanged: function () { | |
| 114 | - var rootScrollView = that.get(); | ||
| 115 | - if (rootScrollView && rootScrollView.android) { | ||
| 116 | - rootScrollView.notify(<definition.ScrollEventData>{ | ||
| 117 | - object: rootScrollView, | ||
| 118 | - eventName: ScrollView.scrollEvent, | ||
| 119 | - scrollX: rootScrollView.android.getScrollX() / utils.layout.getDisplayDensity(), | ||
| 120 | - scrollY: rootScrollView.android.getScrollY() / utils.layout.getDisplayDensity() | ||
| 121 | - }); | ||
| 113 | + var owner: ScrollView = that.get(); | ||
| 114 | + if (owner){ | ||
| 115 | + owner._onScrollChanged(); | ||
| 122 | 116 | } | |
| 123 | 117 | } | |
| 124 | 118 | }); | |
| 125 | 119 | ||
| 126 | 120 | this._android.getViewTreeObserver().addOnScrollChangedListener(this.handler); | |
| 127 | 121 | } | |
| 122 | + | ||
| 123 | + private _lastScrollX: number = -1; | ||
| 124 | + private _lastScrollY: number = -1; | ||
| 125 | + private _onScrollChanged(){ | ||
| 126 | + if (this.android) { | ||
| 127 | + // Event is only raised if the scroll values differ from the last time in order to wokraround a native Android bug. | ||
| 128 | + // https://github.com/NativeScript/NativeScript/issues/2362 | ||
| 129 | + let newScrollX = this.android.getScrollX(); | ||
| 130 | + let newScrollY = this.android.getScrollY(); | ||
| 131 | + if (newScrollX !== this._lastScrollX || newScrollY !== this._lastScrollY){ | ||
| 132 | + this.notify(<definition.ScrollEventData>{ | ||
| 133 | + object: this, | ||
| 134 | + eventName: ScrollView.scrollEvent, | ||
| 135 | + scrollX: newScrollX / utils.layout.getDisplayDensity(), | ||
| 136 | + scrollY: newScrollY / utils.layout.getDisplayDensity() | ||
| 137 | + }); | ||
| 138 | + this._lastScrollX = newScrollX; | ||
| 139 | + this._lastScrollY = newScrollY; | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + } | ||
| 128 | 143 | ||
| 129 | 144 | protected dettachNative() { | |
| 130 | 145 | this._android.getViewTreeObserver().removeOnScrollChangedListener(this.handler); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments