From 07f88cf59010be08da4e923d8b3e888b28ccdedb Mon Sep 17 00:00:00 2001 From: Tianfeng Chen Date: Sun, 27 Nov 2022 18:16:44 -0800 Subject: [PATCH 1/3] Add onGenericMotionListener for mouse scrolling events --- .../impl/android/AndroidImplementation.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java index df1d213d68..359e2a3c9d 100644 --- a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java +++ b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java @@ -4235,6 +4235,29 @@ public boolean onTouch(View v, MotionEvent me) { return myView.getAndroidView().onTouchEvent(me); } }); + /** + * Mouse Event Listener used to handle mouse wheel events + * The mouse wheel can be used to scroll the page up or down + */ + layoutWrapper.setOnGenericMotionListener(new View.OnGenericMotionListener() { + @Override + public boolean onGenericMotion(View view, MotionEvent me) { + if (AndroidImplementation.this.myView == null) { + return false; + } + if (me.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { + switch (me.getAction()) { + case MotionEvent.ACTION_SCROLL: + int currentX = (int) me.getX(); + int scrollDistance = (int) me.getAxisValue(MotionEvent.AXIS_VSCROLL); + int scrollToLocation = (int) (scrollDistance * 5d); + myView.getAndroidView().scrollTo(currentX, scrollToLocation); + return true; + } + } + return false; + } + }); } if(AndroidImplementation.this.relativeLayout != null){ // not sure why this happens but we got an exception where add view was called with From bde5d07cbe11482ca11390df78d7ddf4bddf4d26 Mon Sep 17 00:00:00 2001 From: Tianfeng Chen Date: Sun, 27 Nov 2022 18:52:40 -0800 Subject: [PATCH 2/3] add constrains to make sure the scrolling will not exceed the view area --- .../impl/android/AndroidImplementation.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java index 359e2a3c9d..11c6cb7937 100644 --- a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java +++ b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java @@ -4245,15 +4245,21 @@ public boolean onGenericMotion(View view, MotionEvent me) { if (AndroidImplementation.this.myView == null) { return false; } - if (me.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { - switch (me.getAction()) { - case MotionEvent.ACTION_SCROLL: - int currentX = (int) me.getX(); - int scrollDistance = (int) me.getAxisValue(MotionEvent.AXIS_VSCROLL); - int scrollToLocation = (int) (scrollDistance * 5d); - myView.getAndroidView().scrollTo(currentX, scrollToLocation); - return true; + if (me.isFromSource(InputDevice.SOURCE_CLASS_POINTER) && + me.getAction() == MotionEvent.ACTION_SCROLL) { + double currentX = me.getX(); + double currentY = me.getY(); + int maxHeight = myView.getViewHeight(); + double scrollOffSet = me.getAxisValue(MotionEvent.AXIS_VSCROLL); + int scrollToLocation = (int) (scrollOffSet * 5d + currentY); + // determine the location that the view should scroll to + // the 5d is a scroll speed factor + if (scrollToLocation <= 0) { + scrollToLocation = 0; + } else if (scrollToLocation >= maxHeight) { + scrollToLocation = maxHeight; } + myView.getAndroidView().scrollTo((int) currentX, scrollToLocation); } return false; } From 0cda436d94d9f99df9efd4529d8a44a7c52bc8e9 Mon Sep 17 00:00:00 2001 From: Tianfeng Chen Date: Sun, 27 Nov 2022 19:02:21 -0800 Subject: [PATCH 3/3] little bug fix --- .../src/com/codename1/impl/android/AndroidImplementation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java index 11c6cb7937..905994061a 100644 --- a/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java +++ b/Ports/Android/src/com/codename1/impl/android/AndroidImplementation.java @@ -4260,6 +4260,7 @@ public boolean onGenericMotion(View view, MotionEvent me) { scrollToLocation = maxHeight; } myView.getAndroidView().scrollTo((int) currentX, scrollToLocation); + return true; } return false; }