Ervine's career-best effort lifted Zimbabwe from a precarious 70-4 to 344-8 at stumps. Sri Lanka spinner Rangana Herath took four wickets.
The left-handed batsman held on with Donald Tiripano (24 not out) at the end of play, putting on a frustrating 62-run stand for the ninth wicket.
Ervine, who surpassed his previous Test best of 146, built crucial partnerships including a 84-run fifth-wicket stand with Sikandar Raza (36).
It was the 31-year-old's second Test ton in the 12th match of his seven-year-old international career.
Also Read
Herath sent back openers Regis Chakabva for 12 and Hamilton Masakadza for 19 to rattle the Zimbabwe top-order at the R Premadasa Stadium in Colombo.
Paceman Lahiru Kumara got debutant batsman Tarisai Musakanda caught behind for six as Zimbabwe suffered regular losses in the first two sessions.
Herath took Raza and then Malcolm Waller (36) but Ervine stood firm from one end to thwart Sri Lanka's bowlers.
Medium-pace bowler Asela Gunaratne claimed two wickets while off-spinner Dilruwan Perera and Kumara took a wicket each.
Disclaimer: No Business Standard Journalist was involved in creation of this content