This seems a decent explanation.
The basic idea is to use a capacitor of constant (at least for the duration of the cycle) but not necessarily known capacitance. You charge this with the unknown voltage through a resistor for a certain amount of time, then disconnect the input signal and connect it to a known reference voltage of known value of opposite polarity that discharges it through the same resistor, and measure the time it takes before it returns to zero. The net change in charge is zero (you start with an empty cap and end with an empty cap), so the charge during the two cycles is equal. You can calculate the unknown voltage from the time it took to discharge it.
The advantage is that it's quite easy to detect 0V and measure time accurately, and component values like R and C are not critical. The integrating feature gives good noise rejection. The disadvantage is that's quite slow, since you have to discharge fairly slowly to get good accuracy. There are various smart ways to improve this, by using multiple ramps. The dual slopes are there to negate the effect of a change in capacitance value (it's hard to make capacitors really accurate or stable).