Left-arm spinner Rangana Herath finished with 6-43 off 18 probing overs as New Zealand, trailing by 26 runs, crashed to 118 in their second innings after losing their last nine wickets for 83.
Sri Lanka effortlessly chased down a 93-run target, with debutant Dimuth Karunaratne remaining unbeaten on 60 and Tharanga Paranavitana 31 not out.
Karunaratne, who failed to open his account in the first innings, made amends with a 60-ball knock which included nine fours.
Herath, who took 5-65 in the first innings, finished the Test with 11-108, his second haul of 10 or more wickets in a match.
Middle-order batsman Daniel Flynn, who made a half-century in the first innings, top-scored with 20 in a dismal New Zealand batting performance on a slow turning track.
It was New Zealand's fifth successive Test defeat this year after they lost two matches each in the West Indies and India.
The Test was evenly poised at stumps on Sunday when New Zealand were nine runs ahead with as many wickets in hand, but Herath swung the match in his team's favour with four quick wickets in the morning.
The Sri Lankan spinner continually tested the batsmen with his shrewd variations, removing skipper Ross Taylor (18), James Franklin (two) and then Flynn and Doug Bracewell off successive deliveries.
Herath was well supported by paceman Nuwan Kulasekara and off-spinner Suraj Randiv, who bagged two wickets apiece.
New Zealand's batting woes began against pace, when Kulasekara struck twice in his opening three overs, dismissing overnight batsmen Martin Guptill in his second over and Kane Williamson to have the tourists struggling at 46-3.
Williamson was caught down the leg-side by a diving wicketkeeper Prasanna Jayawardene.
Sri Lanka were bowled out for 247 in their first innings on Sunday in reply to New Zealand's 221, with skipper Mahela Jayawardene scoring 91 and vice-captain Angelo Mathews 79.
The second and final Test starts in Colombo on Sunday.