Perception of time is a tricky one, as it really depends on the expectations of the user.
A loading screen / animation allows us to give an immediate response to a user action when the result of the action is going to take more than 200ms to display something on the screen. It reassures them that system registered their action.
Any user action that has an analogy in the physical world will always feel negative if you have to have some sort of loading animation. A good example of this is a scroll bar that shows a loading symbol when it becomes briefly unresponsive to dragging (sadly folks, this is a real life example from an IDE I use).
For actions that require data processing, application startup, or connecting to remote servers, loading screens are well tolerated by users. Provided they understand the reason for the delay, they will expect such actions to take a little time. If you set expectations using some kind of explanation (e.g. "Connecting to server...") you can further improve perception.
The choice of loading screen will also have an effect on the users perception of time.
- An animated loading screen will always feel faster than one that is just a static message.
- Indefinite loading spinners are great for pauses of between 1 and 10 seconds, e.g. "pull to refresh" loading indicator.
- Progress bars are tricky. A progress bar that hangs for ages at 90% will feel much slower than one that hung for ages at 10% and then went quickly after that, even if the total time was the same. This is because people tent to pay more attention to it if they think it is almost finished, and paying attention changes your perception of time. Scaling the progress bar movement so that it speeds up towards the end really makes it feel faster.
- For very long operations (that take minutes or longer) you should give the user a rough estimate of the time so they can go do something else for a while (feels faster for the same reason the previous point).
Lastly, make sure you don't flash up loading symbols if the loading time is < 1 second. Users may be confused by something that flashes up too quickly for them to perceive.