Skip to content

Instantly share code, notes, and snippets.

@GavinDBrown
Last active November 2, 2020 09:12
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GavinDBrown/a73c53093dc2dd62aa17 to your computer and use it in GitHub Desktop.
Save GavinDBrown/a73c53093dc2dd62aa17 to your computer and use it in GitHub Desktop.
ToggleableScrollWebView
import android.os.Handler;
public class DebouncedRunnable implements Runnable {
private long minimumInterval;
private Handler pendingHandler;
private Runnable runnable;
public DebouncedRunnable(Runnable runnable, int minimumInterval) {
this.minimumInterval = minimumInterval;
this.runnable = runnable;
pendingHandler = new Handler();
}
@Override
public void run() {
pendingHandler.removeCallbacks(runnable);
pendingHandler.postDelayed(runnable, minimumInterval);
}
}
import android.content.Context;
import android.webkit.WebView;
public class ToggleableScrollWebView extends WebView {
private boolean scrollEnabled = true;
private DebouncedRunnable debouncedEnableScroll;
public ToggleableScrollWebView(Context context) {
super(context);
getSettings().setSupportZoom(false);
debouncedEnableScroll = new DebouncedRunnable(new Runnable() {
@Override
public void run() {
setScrollEnabled(true);
}
}, 300);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
int scrollRangeX, int scrollRangeY, int maxOverScrollX,
int maxOverScrollY, boolean isTouchEvent) {
if (scrollEnabled) {
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
return false;
}
@Override
public void scrollTo(int x, int y) {
if (scrollEnabled) {
super.scrollTo(x, y);
}
}
@Override
public void computeScroll() {
if (scrollEnabled) {
super.computeScroll();
}
}
public void temporarilyBlockScrolling(){
setScrollEnabled(false);
debouncedEnableScroll.run();
}
public boolean checkIfScrollable() {
return computeVerticalScrollRange() > getHeight()
|| computeHorizontalScrollRange() > getWidth();
}
public void setScrollEnabled(boolean scrollEnabled) {
this.scrollEnabled = scrollEnabled;
}
public boolean isScrollEnabled() {
return scrollEnabled;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment