Despite a century from Jonathan Trott, who became the first England player to score a hundred this winter, the tourists failed to chase a record 340 on the fourth day.
Sri Lanka won their first Test on home soil since the retirement of Muttiah Muralitharan – thanks to left-arm spinner Rangana Herath who took 12 wickets in the match.
“In truth we made too many mistakes to win the game,” said the England captain. “In between we fought very hard and there were some outstanding performances: Jimmy Anderson in the first innings, Graeme Swann in the second and Jonathan Trott today.
“But we left ourselves with too much to do mainly with our batting in the first innings, and we are very disappointed.”
“Credit to Sri Lanka, they outplayed us and thoroughly deserved victory.”
England were closing in on victory just before tea, however Matt Prior’s dismissal sparked a dramatic batting collapse of six wickets for 31 runs.
And any English hopes of winning were extinguished when an exhausted Trott was caught at leg-slip for 112.
The win is only Sri Lanka’s second victory both home and away since Muralitharan retired in 2010.
“It’s been a tough period for us trying to get things right but the boys tried really hard to improve as a unit,” said Sril Lanka captain Mahela Jayawardene.
“Today we showed a lot of character. We just had to hang in there but I always thought 340 was a big ask on this track.”
The final Test between Sri Lanka and England gets under way on Tuesday in Colombo.
MORE: The latest football news
MORE: The latest tennis news