ANAHEIM, CALIF. (TNS) — Mastered by Angels starter Andrew Heaney, who threw a one-hit shutout, the Royals lost 1-0 at Angel Stadium on Tuesday night.

On the night of his 27th birthday, Heaney iced the Royals more than once. Every time they made hard contact against him, a fielder was there to make an out.

In nine scoreless innings, Heaney threw 116 pitches, struck out four batters and issued one walk. Even as he approached 100 pitches, he continued to throw 94-95 mph.

“Really good," Royals manager Ned Yost said. "Sneaky, sneaky fastball. Got it up to 94 in the eighth inning. Mixed in some good changeups, curveballs. We just couldn’t center his fastball."

The Royals were no-hit into the fifth inning before Hunter Dozier rocketed a single into left field. They reached base just four times against Heaney, who hadn't thrown a complete game previously in his career.

The milestone came on a night when Royals rookie starting pitcher Brad Keller, on a bit of a longer leash making his second start of the season, took the loss despite being effective.

Keller's outing ended in the fifth inning after he yielded back-to-back, hard-hit singles to Angels outfielders Chris Young and Michael Hermosillo with one out. Keller had worked around three prior hits and a walk, stranding all three runners and striking out three batters. At most, he threw 18 pitches in two different frames.

But as the 75-pitch mark approached entering the fifth inning, Kevin McCarthy, who blew a lead for Danny Duffy here on Monday, was asked to warm up quickly in the bullpen. McCarthy was called in within moments, and navigated the jam by retiring Ian Kinsler on a fly ball to center field that allowed Young to move to third base. The third out came when Salvador Perez and Whit Merrifield combined to catch Hermosillo trying to steal second base — but Young stole home before Hermosillo was tagged out.

"That’s kind of a little bit my fault," Perez said. "But I didn’t think he’d go right away because (Jefry) Marte was hitting. Yesterday he got four hits so I thought they were gonna let him hit it … maybe score two, so that’s what I was thinking."

Said Yost: "Obviously you don’t want them to score. Salvy made a great quick throw but the ball had a little tail on it and took Whit’s momentum toward first base and by then Young was gone. Nothing you can do."

Trevor Oaks delivered three scoreless innings in relief, scattering two hits to keep the Royals in the game.

"Cal (Eldred) pulled me aside and just talked about how I need to drive a little bit more off my back leg," Oaks said. "That kind of seemed to fix some other issues too. The first two outings I had, just kind of had some trouble with timing. Needed to make sure I got the ball out in front. Sinking back a little bit more, trying to drive off my back leg seemed to help me get out in front."

The hot corner: Mike Moustakas might have wound up playing third base at Angel Stadium if his attempt at free agency hadn’t been blown up by, among other moves, the Angels’ decision to sign Zack Cozart, the former Reds shortstop, to play the corner infield spot instead.

Moustakas, who returned to the Royals on a one-year contract with a mutual option for 2019, flashed his athleticism at third base on multiple occasions Tuesday night, including in the first inning.

Angels slugger Mike Trout shot a ground ball up the left side of the infield at 109.7 mph — and Moustakas dived to his left to corral it with ease. He made a quick throw from his knees to Whit Merrifield at second base to start an inning-ending double play.

Out in Omaha: Reliever Justin Grimm, who’s been sidelined since the end of April because of lower back stiffness, has gotten himself back on track the last week.

He missed about 10 days of rehab because of the birth of his first child, but since returning to the Storm Chasers last week, he’s tossed 3 1/3 innings, struck out six batters and allowed two earned runs. In his last two outings, he’s not allowed a hit.

With Blaine Boyer on the disabled list because of his own back issues, the Royals lack veteran leadership in the bullpen. Grimm’s return would shore up the lack of experience — especially if he gets his plus-grade curveball back in working order.

Up next: The Royals, who dropped to 21-40, conclude this three-game series with Ian Kennedy on the mound against the Angels’ Shohei Ohtani at 9:07 p.m. Wednesday. The Royals have lost three games in a row.