SciChart® the market leader in Fast WPF Charts, WPF 3D Charts, iOS Chart, Android Chart and JavaScript Chart Components
Hello,
I’m wanting to switch to SciChart from a previous charting library. One neat thing that our previous library did that I cannot figure out how to do in SciChart is change the interaction between tooltips/rollover and panning.
What I would like to do is Pan/Drag the chart on short tap events, and do a rollover or tooltip cursor on long tap events. By default it looks like I get rollover and panning together on any tap event, which is not ideal behavior for my apps. Depending on the tap event type, I would like to do just one or the other, not both. How can I do something similar with SciChart?
Thank you,
Hi there,
You can simulate touch event for RolloverModifier by calling its onTouch() when onLongPress() in CustomGestureModifier is called. This should show its content:
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
// enable rollover after long press
rolloverModifier.setIsEnabled(true);
zoomPanModifier.setIsEnabled(false);
// create touch event args for rollover modifier
final ModifierTouchEventArgs args = new ModifierTouchEventArgs();
args.e = e;
args.isHandled = false;
args.isMaster = true;
args.isInSourceBounds = true;
rolloverModifier.onTouch(args);
args.clear();
}
Hope this will help you!
Best regards,
Yura
Hi there,
Unfortunately we don’t support this behavior out of the box, but it can be done using custom chart modifiers API. There is a similar question which may help you.
Hope this will help you!
Best regards,
Yura
Hi Yura,
That link got me part way there. I can enable/disable the operations successfully. Where I am having trouble is on the longpress event. After enabling the rolloverModifier, the rollover does not appear until a subsequent Move event. Is there any way for me to force the rollover to appear on the longpress event itself instead of waiting for a Move? My code for the custom gesture modifier is below.
class CustomGestureModifier(private val rolloverModifier: RolloverModifier,private val zoomPanModifier: ZoomPanModifier) :GestureModifierBase() {
override fun onLongPress(e: MotionEvent?) {
// enable rollover after long press
/*
This is the problem, rollover does not appear until subsequent MOVE event.
Can rollover be forced programatically at this point?
*/
rolloverModifier.isEnabled = true
zoomPanModifier.isEnabled = false
super.onLongPress(e)
}
override fun onUp(e: MotionEvent?) {
super.onUp(e)
// disable rollover after touch up
rolloverModifier.isEnabled = false
zoomPanModifier.isEnabled = true
}
override fun onScroll(
e1: MotionEvent?,
e2: MotionEvent?,
distanceX: Float,
distanceY: Float
): Boolean {
// disable rollover on scroll
rolloverModifier.isEnabled = false
zoomPanModifier.isEnabled = true
return true
}
override fun onFling(
e1: MotionEvent?,
e2: MotionEvent?,
velocityX: Float,
velocityY: Float
): Boolean {
Log.d(TAG, "OnScroll")
rolloverModifier.isEnabled = false
zoomPanModifier.isEnabled = true
return true
}
init {
// disable rollover by default
rolloverModifier.isEnabled = false
zoomPanModifier.isEnabled = true
}
}
Thanks Yura, I tried both of those, but it didn’t resolve the problem. Here’s the code I’m using to create/add the modifiers:
val chartModifiers = chartSurface.chartModifiers
val rolloverModifier = RolloverModifier()
val zoomPanModifier = ZoomPanModifier()
val customGestureModifier = CustomGestureModifier(rolloverModifier, zoomPanModifier)
rolloverModifier.receiveHandledEvents = true
chartModifiers.add(rolloverModifier)
chartModifiers.add(zoomPanModifier)
// if added first, it still doesn't show cursor on longPress, plus it then doesn't hide cursor on onUp
chartModifiers.add(customGestureModifier)
Without seeing the SciChart source code, its like the rolloverModifier is not designed to show the cursor on longPress (normally it would just show it on a simple down touch), so passing the longPress through doesn’t trigger anything in the rolloverModifier?
Thanks again for your assistance.
Please login first to submit.