373 views
in GUI Development by
Hello,

We are implementing an application making use of Simple Touch Handlers as well as Slide & Rotate Touch Handlers.
All handlers are part of ready-made GUI components like vertical lists or circular sliders.

The Simple handlers work fine, but the Slide & Rotate handlers' user experience is sub-optimal.
So we are looking for a thorough understanding of the Touch Handlers' internal workings & parameters.
Is there a documentation you could point us to?

To be more specific, it seems that (both on the V11 prototyper and on the target system) the amplitude of the gesture that the handler outputs to the GUI is much smaller than the amplitude of touch coordinates the handler receives from the touch screen driver. In other words, given a vertical list in the prototyper, the amount of scrolling is much less than the movement of the mouse pointer. (The static touch coordinates after finishing the gesture, however, match the GUI coordinates precisely.)
Well noted, this issue affects the prototyper as well as the target system.

This issue affects vertical lists as well as circular sliders, so we expect the root cause to be located outside the list or slider component, right?
Initially, I thought that the "gain" of the slide touch handler was fixed to 1, that is, if the touch coordinate's y value changes by 100 pixels, the scrolling distance is 100 pixels as well. Am I wrong to assume so?

Thanks,
Steffen

1 Answer

0 votes
by

Hello Steffen,

I'm not sure whether I really understood the problem. I see two possible causes:

Cause 1: Do you observe some displacement between the finger movement and the resulting effect of the handler? This can be explained by screen update delays. When the user drags the finger for e.g. 1 cm, the effect on the screen is not visible before the next screen update has been performed. This, in turn, may depend on the screen update frequency. In this short time the user could move the finger even more far away. The larger the delay for the next screen update the larger the inertia the user perceive. This effect augments when the user moves the finger more quickly and it is for physical limitations inevitable unless your hardware can update screen faster than the user drags the finger.

Cause 2: Do you combine multiple handler together? For example, the Simple Touch Handler is lying in front of the Slide Touch Handler so that when the user taps the screen, the Simple Touch Handler handles the event. In turn, when the user touches the screen and drags the finger, the Simple Touch Handler recognizes this gesture and redirects the interaction to the Slide Touch Handler in the background. See also Combine several Touch Handlers together.

Does it describe your application case? If yes, the displacement can be explained by the gesture detection in the Simple Touch Handler. At the beginning of the interaction it is unknown what intention does the user have. Does he want to tap or drag the screen contents? His intention is only known after the user made some gesture and the Simple Touch Handler recognized it. Up to this point of time the Slide Touch Handler did not received any events and thus were not able to perform any slide operation. As consequence a displacement in the Slide Touch Handler may occurs. Using the property RetargetOffset (see the above mentioned documentation) you can configure the distance the user has to drag the finger so the handler recognizes the gesture. You could thus configure the property with a lower value. Per default it is configured with 8 pixel.

If none of the above described scenarios do fit your application case, can you provide us an example demonstrating the behavior for further analysis purpose? 

Concerning the internal documentation, such is not available as internal implementation details may change and we don't want the user to create dependencies on it. However the entire implementation is well inline commented. So you can study the implementation.

I hope it helps you further.

Best regards

Paul Banach

by
Hi Paul,

Thanks for your reply.

To clarify further, the issue is not transitional in nature, and it does not seem to be related to screen update performance.
The user may slide their finger as slowly as they like. The more they slide, the more touch handler output slides as well, but the offset between finger coordinates and handler output coordinates becomes progressively larger. If the user lifts their finger and touches down again, the static coordinate is correct.

I have read the documentation about overlaying multiple handlers.
There are multiple handlers on several screens indeed, but they do not intentionally overlap. I will check for this once again and have a look at RetargetReason, too.

Frankly speaking, though, due to the complexity of our application, we cannot be 100% sure that there isn't any issue with the GUI components we are using because some of them have been derived from standard classes, augmented and combined. There may have beed bugs introduced while deriving the components, which went unnoticed for some time until now. So it is difficult to identify which modification, if any, started causing this issue. So this question also is about "where do we need to look in order to identify the bug that we may have introduced ourselves some time ago?".

So for my understanding, this behavior is not intended, and there is no such parameter in handler implementation that adjusts the "gain".

The Slide Handler has many cool features we haven't exploited so far, which we would love to use. But prior to this, basis functionality needs to be fixed.

Thanks,
Steffen
by

Hi Steffen,

The more they slide, the more touch handler output slides as well, but the offset between finger coordinates and handler output coordinates becomes progressively larger. 

If I understood this description correctly, it sounds to me like the coordinates were calculated twice. Or, more possible, in your implementation you add the coordinates reported by the handler to some value stored e.g. in a variable. This would result in the variable's value augmenting each time new coordinates are provided.

... but the offset between finger coordinates and handler output coordinates becomes progressively larger

Does the Touch Handler itself move during the touch interaction? If yes, I can imagine that this could cause similar behavior where after the Touch Handler has been moved during the touch interaction the handler calculates with shifted coordinates.

Well, I have still a difficulty to imagine how the problem appears in your application. An example project or at least a video could help me.

Best regards

Paul Banach

by
Hi Paul,

Sorry to take so much time to follow up, but we needed to perform some testing by ourselves.

At first glance, it looked as if the Slide handler issue and the Rotate handler issue had a common cause. We now think these are two separate issues.

The Slide handler issue effectively turned out as a side effect of the Rubber Band animation that occurs at the top & bottom end of the vertical list. User experience improves significantly as soon as more items are added to the list, spanning multiple pages. This can be considered as resolved.

The Slide handler behavior seems to improve by meticulously defining RetargetReason in all other touch handlers nearby. We will continue to monitor this behavior and return to this question should it become necessary.

Thanks for your support so far,
Steffen
by

Hello Steffen,

thank you for the information. Concerning the rubber band animation, it can be disabled for each Slide Handler individually. See the section Control the rubber band animation for more details May be it helps you further ....

Best regards

Paul Banach

by
Hello Paul,

The first issue concerning vertical lists can be considered resolved now, after turning Rubber Band animation off. User experience was improved further by configuring list in Endless mode. (This certainly depends upon the application -- we like it.)

Second issue concerning circular slider is still there. We have removed all custom decorations and enhancements from our Circular Slider control and placed it on a test screen with no other touch handlers nearby. Still, the slider does not follow finger movement precisely. I need to admit that the size of the control is rather small (190 x 170 px on a 7" WVGA screen), but we feel this should be sufficient.

A video has been prepared, please let us know where to upload.

Thanks,
Steffen
by

Hello Steffen,

the best would be when you upload an example demonstrating the behaviour. However, it should also be possible to upload a video using the Link button above. See the screenshot:

Best regards

Paul Banach

Ask Embedded Wizard

Welcome to the question and answer site for Embedded Wizard users and UI developers.

Ask your question and receive answers from the Embedded Wizard support team or from other members of the community!

Embedded Wizard Website | Privacy Policy | Imprint

...