What is the difference between `onInterceptTouchEvent` and `dispatchTouchEvent` in Android?

According to the android developer guide, both methods can be used to intercept a touch event (`MotionEvent`), but what is the difference?

How do `onInterceptTouchEvent`, `dispatchTouchEvent` and `onTouchEvent` interact together within a hierarchy of Views (`ViewGroup`)?