How can I detect the intensity of touch pressure in libGDX? For example, low pressure, medium, medium-high, high and so on. There are some questions about it but there aren't answers for libGDX.
2 Answers
you can call
Gdx.input.getPressure()
This has been implemented in LibGDX here in July 2018 https://github.com/libgdx/libgdx/issues/5241
There's currently (update 1.9.6) no way to get the touch pressure internally from within LibGDX but using callbacks from the android MotionEvent
we can access the touch pressure anyways.
The code might look something like this:
// Inside your AndroidLauncher's onCreate method
final AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
final MainClass game = new MainClass();
final View view = initializeForView(game, config);
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
// The easiest option would probably be to have a
// (static?) variable in 'game' that stores pressure.
game.pressure = event.getPressure();
return false;
}
});
This will register an OnTouchListener
that will update the pressure
variable
each time the screen is touched. You can then use this pressure
variable in your code after a touch event has happened to query the touch pressure.
This is the method I've used the (few) times I've needed touch pressure in LibGDX games and it seems to work more or less flawlessly.
-
\$\begingroup\$ OnTouch method is never called \$\endgroup\$– CurioCommented Jun 11, 2017 at 15:30
-
\$\begingroup\$ That's very strange... I just tested it and it works fine. Are you sure it's not being called or is it the variable that's not updating? Because some devices doesn't support touch pressure and Android will instead try to simulate touch pressure, which sometimes doesn't work. Android virtual devices also sometimes have trouble identifying pressure. \$\endgroup\$– CharanorCommented Jun 11, 2017 at 19:50
-
\$\begingroup\$ But with
final View view = initializeForView(game, config);
how can I know which view is touched? \$\endgroup\$– CurioCommented Jun 11, 2017 at 20:51 -
\$\begingroup\$ @Curio As far as I know there should only be one view active at all. \$\endgroup\$– CharanorCommented Jun 13, 2017 at 11:10
-
\$\begingroup\$ It doesn't work :(, is there another way? \$\endgroup\$– CurioCommented Jun 13, 2017 at 15:24