Stiff Scroll Effect

An Effect to be used with ScrollView to prevent scrolling beyond the bounds, but politely.

A ScrollView constructed with StiffScrollEffect, eg. ScrollView(effect_cls=StiffScrollEffect), will get harder to scroll as you get nearer to its edges. You can scroll all the way to the edge if you want to, but it will take more finger-movement than usual.

Unlike DampedScrollEffect, it is impossible to overscroll with StiffScrollEffect. That means you cannot push the contents of the ScrollView far enough to see what’s beneath them. This is appropriate if the ScrollView contains, eg., a background image, like a desktop wallpaper. Overscrolling may give the impression that there is some reason to overscroll, even if just to take a peek beneath, and that impression may be misleading.

StiffScrollEffect was written by Zachary Spector. His other stuff is at: https://github.com/LogicalDash/ He can be reached, and possibly hired, at: zacharyspector@gmail.com

API - kivymd.stiffscroll

class kivymd.stiffscroll.StiffScrollEffect(**kwargs)

Bases: kivy.effects.kinetic.KineticEffect

drag_threshold

Minimum distance to travel before the movement is considered as a drag.

drag_threshold is an NumericProperty and defaults to ’20sp’.

min

Minimum boundary to stop the scrolling at.

min is an NumericProperty and defaults to 0.

max

Maximum boundary to stop the scrolling at.

max is an NumericProperty and defaults to 0.

max_friction

How hard should it be to scroll, at the worst?

max_friction is an NumericProperty and defaults to 1.

body

Proportion of the range in which you can scroll unimpeded.

body is an NumericProperty and defaults to 0.7.

scroll

Computed value for scrolling

scroll is an NumericProperty and defaults to 0.0.

transition_min

The AnimationTransition function to use when adjusting the friction near the minimum end of the effect.

transition_min is an ObjectProperty and defaults to kivy.animation.AnimationTransition.

transition_max

The AnimationTransition function to use when adjusting the friction near the maximum end of the effect.

transition_max is an ObjectProperty and defaults to kivy.animation.AnimationTransition.

target_widget

The widget to apply the effect to.

target_widget is an ObjectProperty and defaults to None.

displacement

The absolute distance moved in either direction.

displacement is an NumericProperty and defaults to 0.

update_velocity(self, dt)

Before actually updating my velocity, meddle with self.friction to make it appropriate to where I’m at, currently.

on_value(self, *args)

Prevent moving beyond my bounds, and update self.scroll

start(self, val, t=None)

Start movement with self.friction = self.base_friction

update(self, val, t=None)

Reduce the impact of whatever change has been made to me, in proportion with my current friction.

stop(self, val, t=None)

Work out whether I’ve been flung.