Captain Mahela Jayawardene once again led from the front, hitting his second century in as many tests to steer Sri Lanka to 238 for six on the opening day of the second and final match against England on Tuesday.
The home team, 1-0 up in the series, won the toss for the second straight test but honours were even at the end of the day.
Paceman James Anderson took three early wickets to reduce Sri Lanka to 30 for three before Jayawardene came to the rescue, striking 11 fours and one six in his 105.
It was the 34-year-old right-hander's 31st test hundred and his eighth against England, the most he has scored against any country.
Angelo Mathews, back in the side after injury, was unbeaten on 41 at the close while Suraj Randiv was five not out.
Jayawardene, who made 180 in the first test in Galle and batted without blemish here, was trapped leg before by Graeme Swann late in the day after the spinner went round the wicket and straighted one to the Sri Lankan skipper.
The batsman opted to review the decision but the 'Hawk-eye' technology showed the ball was going on to hit the top of his leg stump after pitching outside off.
England then picked up a wicket with the second new ball when fast bowler Steven Finn had Prasanna Jayawardene caught behind by Matt Prior for seven.
Earlier, skipper Jayawardene and Thilan Samaraweera pulled Sri Lanka out of trouble with a fourth-wicket stand of 124 after Anderson had removed Tillakaratne Dilshan (14), Lahiru Thirimanne (eight) and Kumar Sangakkara for a duck.
Samaraweera, who was hit on the head by Finn when he ducked into a bouncer, made a composed 54 with five fours until he was trapped leg before by Tim Bresnan, the ball skidding through to beat his forward defensive prod.
The pitch offered early assistance to the seamers and Dilshan hit two consecutive fours off Anderson before the opener was caught behind.
Sangakkara then suffered his second successive first-ball duck when he edged Anderson to Andrew Strauss at first slip and the visiting captain held on to a juggling catch.
Thirimanne was trapped leg before, offering his pad to a delivery that pitched outside the off stump but swung back in.
Opener Thirimanne reviewed the decision and failed to get it overturned.
more in Sports