Both the interaction with controls as well as the workflow itself should be clear to users. For instance, it has to be obvious if a button can be pressed at all, if it is in focus and one could use space or enter to execute the function, and whether or not it just has been pressed. Usually, disabled buttons are grayed out, if the focus is on the button it gets an extra frame, and when pressed it has a sunk appearance. Another method to support perception, especially for flat designs, is to use animations.
An animation is a very short sequence of intermediate states between initial and final states. It should be categorized from high level animations, like wobbly windows, that serve an emotional purpose, low-level animations can help to enforce a feeling of air, openness, and depth to the overall design to create a sensation of space and placement,
- Use animations only for a functional purpose.
- Use animations to support users' consciousness on transition between two states that are not absolutely clear without an animation.
- Guide the user’s attention with animations and focus through multiple steps of a process or procedure.
- Make animations as unobtrusive as possible. Good animations are seamless to the user experience.
- Use the same kind of animation of similar interactions. For instance, expanding the main menu, a context menu or an accordion should be equally animated.
- Do not use animations longer than 200ms, at least for frequently used functions. It may be perceived as a slowdown of a user's workflow.
- Make sure that animations run smoothly even on lower spec machines.
- Always allow users to switch off animations.
- Increase animation timing to gain accessibility.
Advice for creating an animation
- Follow physical principles when using animations.
- Accelerate and decelerate movement as if has a mass. Consider to correlate control size with mass and apply acceleration accordingly. Use Easing.InOutQuad for items up to 100px, Easing.InOutCubic if size is between 100 and 250px, and Easing.OutInQuart for all above 250px.
- Start animations from their origin.
- Avoid linear spatial paths, except when movement is constrained to an axis or moving towards/away from a specific point in concert with other elements.
- Make interactions responsive.
- Show a surface reaction to input (Like ripples that appear after a drop falls).
- Make the material provide visual feedback (like pressing a button).
- Make interactions anticipative.
- Make sure that the direction in which elements move is cohesive across the transition. Avoid conflicting movements and overlapping paths.
- Consider the depth story: what moves under what, and why?
- Support spatial relationships through consistent motions for incoming and outgoing elements.
The life of an control follows a sequence from OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ... to … OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy. At some steps the support by an animation makes sense, others are well indicated right now by static visual features (like a frame around focused buttons). On the other hand, if a future animation is well conceivable the cell is marked with green color. This table should be filled up with small animations that illustrate the target behavior.
|Main menu||-||shown from hidden||F10, expand on click||item selection||item clicked||menu closed||-|
|Statusbar||-||shown from hidden||-||-||-||-||-|
|Contextmenu||-||-||expand on click||item selection||item clicked||menu closed||-|
|Toolbar||-||-||on (can) dock||-||-||on undock||-|
|Scrollbar/Scrollbox||-||-||-||-||indicate if first/last item or start/end is reached on scroll; accelerate/decelerate on big changes||-||-|
|Push Button||-||-||mouse hoover||focus on button (cf. tab order)||button pressed||focus lost||-|
|Toggle Button||-||-||-||-||toggle on/off||-||-|
|Command Link||-||-||currently underline on hoover||-||link gets clicked||-||-|
|Dialogs||-||dialog shows up||in case of non-modal dialogs||-||-||-||dialog is being closed|
|Splitter||-||-||-||-||indicate the ability to resize||-||-|
|Tabs||-||-||-||-||animate tab switching (from/to)||-||-|
|Accordion||-||-||-||indicate where to click||animate accordion switching (from/to)||-||-|
|List View||-||-||-||-||(cf. scrolling)||-||-|
|Tree View||-||-||-||-||animate expand/collapse of nodes; cf. scrolling||-||-|
|Radio Button||-||-||-||-||indicate the change over (from/to)||-||-|
|Check Box||-||-||-||-||in case of checking a box with children indicate their auto checking||-||-|
|Drop-down list||-||-||Indicate the difference to (editable) combobox||-||animate expanding; indicate the bearing of selection on other controls||animate collapsing||-|
|Combo box||-||-||Indicate the difference to (non-editable) dropdown||-||animate expanding; indicate the bearing of selection on other controls; animate when an item is being added||animate collapsing||-|
|Line edit||-||-||Indicate if it's editable||-||Animate enter; indicate bearing on other controls||-||-|
|Text edit||-||-||-||-||Indicate copy/paste function; cf. scrolling||-||-|
|Table||-||-||-||-||Indicate add/del of col/row||-||-|
|Spin box||-||-||-||-||Animate the step on changing the value||-||-|
|Tooltip||-||-||-||-||-||Indicate when a tip is closed soon (cf. fade out for notifications)||-|
|Notification||-||-||-||-||-||Indicate when the notification is closed soon||-|
|Progress bar||-||-||-||-||Indicate operation as well on slow progress (e.g. as Microsoft does)||-||-|
|Custom controls||-||-||-||-||animate zoom||-||-|
Parts of the guideline were inspired by Google's guideline on animations.