Born in Ventura, California, Ennis grew up in the Westview Village housing project where he and his five siblings played basketball, soccer, rode bikes and skateboarded. As a youngster, he and his family moved around a lot—Ennis attended three different high schools in his freshman year alone. They later settled back down at Westview Village where he went on to graduate from Ventura High School in 2009.
As a freshman at Oxnard College in 2009–10, Ennis was named first-team All-WSC after averaging 19.0 points, the third most in the state by a freshman, and 7.7 rebounds per game. For his sophomore season, he returned home to play for Ventura College, and in 2010–11, he was named first-team All-California Community College Athletic Association and first-team All-Western State Conference after averaging 20.3 points, 7.8 rebounds, 5.0 assists and 1.6 steals per game. He scored 1,053 points in two seasons of junior college basketball, while scoring in double figures in 48 of his 52 games.
For his junior season, Ennis joined the Long Beach State 49ers, and immediately garnered the starting small forward role. In 2011–12, Ennis earned honorable mention All-Big West Conference honors after averaging 10.0 points, 4.1 rebounds, 2.6 assists and 1.6 steals per game.
With the departure of conference player of the year Casper Ware, Ennis became the go-to player for the 49ers in 2012–13. He responded by averaging 16.5 points and 6.7 rebounds per game while leading the 49ers to another regular-season Big West championship. At the end of the season, Ennis was named Big West Player of the Year and an AP honorable mention All-American.
On April 5, 2013, Ennis scored a team-high 13 points in the Reese's College All-Star Game, leading the East team to an 87–81 win over the West.
On June 27, 2013, Ennis was selected by the Atlanta Hawks with the 50th overall pick in the 2013 NBA draft. His rights were subsequently traded to the Miami Heat on draft night, and he later joined the Heat for the 2013 NBA Summer League. The Heat reportedly wanted Ennis to play for their NBA Development League affiliate team, the Sioux Falls Skyforce, in 2013–14 but were unable to sign him to the NBA minimum salary of USD$490,180 due to salary cap restrictions. Consequently, the most Ennis would have earned playing in the D-League was USD$25,000, so Ennis made the decision to play overseas in order to support his father, his disabled mother, and his five siblings.
On August 10, 2013, Ennis signed with the Perth Wildcats for the 2013–14 NBL season. He quickly became an excitement machine in Perth playing alongside fellow import Jermaine Beal. His NBL debut on October 11, 2013 lived up to the hype as the talented swingman did a bit of everything—dunks, blocked shots, assists and jump shots—on his way to 25 points, four rebounds and two assists in an 83–80 win over the Adelaide 36ers. His 25 points marked the most points scored by a Wildcat on debut. Ennis went on to earn Player of the Month honors for October after averaging a league-leading 24.0 points per game, and was also in the league's top ten for rebounds with 6.8 per game. The Wildcats dominated the early season proceedings, earning an 8–0 record thanks to the play of Ennis. His high-flying dunks and athleticism rocked the league as he proved to be a top MVP candidate alongside Wollongong Hawks point guard Rotnei Clarke and Melbourne Tigers shooting guard Chris Goulding. On November 30, 2013, he scored a season-high 33 points in an 85–75 win over the Cairns Taipans.
The Wildcats finished the 2013–14 regular season with a league-best 21–7 win/loss record, booking themselves a spot in the post-season for a 28th straight season. On March 28, 2014, Ennis played in his first playoff game—Game 1 of the Wildcats' semi-final series against the Wollongong Hawks. In just under 32 minutes of action, he scored a game-high 25 points, 14 of which came in the third quarter, to help the Wildcats defeat the Hawks 91–79. Two days later, Ennis' 20-point performance in Game 2 helped the Wildcats claim a 2–0 series victory over the Hawks, advancing them to the NBL Grand Final. In Game 1 of the grand final series against the Adelaide 36ers on April 7, Ennis scored a game-high 30 points in leading the Wildcats to a 92–85 win at Perth Arena in front of 13,291 fans, taking a 1–0 lead in the best-of-three series. In Game 2 on April 11 in Adelaide, Ennis endured a quieter-than-usual night, tallying just 14 points before fouling out with 22 seconds left in the contest. The 36ers subsequently leveled the series at 1–1 with an 89–84 win, sending the grand final to a deciding Game 3 in Perth on April 13. In Game 3, Ennis' early foul trouble limited him to a season-low nine points, but thanks to teammate Jermaine Beal picking up the slack, the Wildcats took home a comfortable 93–59 win to claim a league-best sixth NBL championship.
Prior to Game 1 of the grand final series, Ennis finished third in the MVP voting behind Rotnei Clarke (winner) and Chris Goulding, and earned All-NBL First Team honors. At the Wildcats MVP Ball, Ennis was crowned the Gordon Ellis Medalist as the club's Most Valuable Player for the 2013–14 season.
Ennis appeared in all 33 games for the Wildcats in 2013–14, averaging 21.2 points, 7.1 rebounds and 2.1 assists per game whilst shooting 46.8% from the field.
Following the conclusion of the 2013–14 NBL season, Ennis moved to Puerto Rico, where he joined Piratas de Quebradillas for the 2014 BSN season. He appeared in 12 games for the club before returning to the United States in June to attend various NBA workouts. Over those 12 games, he averaged 16.6 points, 8.3 rebounds, 2.5 assists, 1.8 steals and 1.0 blocks per game.
On July 15, 2014, Ennis signed a multi-year deal with the Miami Heat. He impressed during the 2014 NBA Summer League, averaging 15.5 points, 5.7 rebounds, 1.5 assists and 1.3 steals in six games.
On October 29, 2014, Ennis made his NBA debut in the Heat's 107–95 season-opening win over the Washington Wizards. With the Heat up by four points with less than nine minutes to go in the fourth quarter, Ennis brought the American Airlines Arena crowd to their feet with a spectacular three-point play, taking off from midway down the paint, elevating over Rasual Butler and throwing down a dunk while getting fouled. He finished the game with five points and two rebounds in 14½ minutes of action off the bench. He went on to record a then season-best game on December 21 with 16 points and 8 rebounds in a 100–84 win over the Boston Celtics.
On March 29, 2015, Ennis tied his season high of 16 points in a 109–102 win over the Detroit Pistons. On April 5, he topped his season high, recording 17 points and 5 rebounds in a loss to the Indiana Pacers. In the Heat's season finale on April 15, Ennis received just his third start of the season with the majority of his teammates sitting out. He played the entire game and finished with 17 points, 12 rebounds and 6 assists in a 105–101 win over the Philadelphia 76ers. The Heat missed the playoffs in 2014–15 with a 37–45 record, good for 10th in the Eastern Conference. Ennis appeared in 62 of the Heat's 82 games during his rookie season, averaging 5.0 points and 2.8 rebounds in 17.0 minutes per game.
With $845,059 guaranteed salary on the line for Ennis coming into the 2015–16 season, he struggled during the 2015 NBA Summer League, calling his play "terrible" after shooting 29.7 percent from the field (19-of-64) in seven games, including 2-of-23 on three-pointers, and recorded more than twice as many turnovers (23) as assists (11). Tendinitis in his knees contributed to his struggles, but with three months between summer league and training camp, Ennis was able to rejuvenate himself while receiving treatment that subsided the tendinitis. He also worked on his jump shot with Heat assistant coach Keith Smart, and focused on improving his ball-handling. Despite sustaining a dislocated finger on his left hand in Miami's exhibition finale against the New Orleans Pelicans, the Heat retained Ennis for the 2015–16 season after earning a spot on the team's opening night roster.
Ennis managed game time in three of the Heat's first seven games to begin the 2015–16 season, when on November 10, 2015, he and Mario Chalmers were traded to the Memphis Grizzlies in exchange for Jarnell Stokes and Beno Udrih, a deal undertaken in order for the Heat to cut $6 million in luxury tax.
Upon joining the Grizzlies, Ennis was unable to make an impact or string together consecutive games due to the team's strong contingent of wing players in Jeff Green, Matt Barnes, Tony Allen, JaMychal Green and Vince Carter. He subsequently spent the majority of the 2015–16 season in the NBA Development League playing for the Iowa Energy, the Grizzlies' affiliate team. In his debut for the Energy on December 5, he scored a season-high 32 points in a 116–93 win over the Canton Charge. On March 2, 2016, after appearing in just 10 games for Memphis, he was waived by the organization.
On March 6, 2016, Ennis was acquired by the Iowa Energy, joining the team for the rest of the season. He played for the Energy that afternoon, recording 30 points and 7 rebounds in a 109–104 loss to the Delaware 87ers. On March 16, he recorded his first double-double of the season with 24 points and 10 rebounds in a 106–102 win over the Erie BayHawks. Two days later, he had a season-best game with 30 points, 13 rebounds, 3 assists and 3 steals in a 123–106 win over the Maine Red Claws. Between March 12 and March 26, Ennis helped Iowa win six straight games to bring them back into playoff contention. However, a loss to the Sioux Falls Skyforce on March 29 ended their streak, as they were eliminated from the playoff race with two games remaining in the season. In 24 games for Iowa during the 2015–16 season, he averaged 18.8 points, 6.0 rebounds, 2.6 assists and 1.0 steals in 33.4 minutes per game.
On March 30, 2016, Ennis signed a 10-day contract with the New Orleans Pelicans to help the team deal with numerous injuries. New Orleans had to use an NBA hardship exemption in order to sign him as he made their roster stand at 18, three over the allowed limited of 15. He made his debut for the Pelicans later that night, recording 13 points, 5 rebounds and 4 assists in 24 minutes off the bench in a 100–92 loss to the San Antonio Spurs. In the Pelicans' next match the following day, he played in 30 minutes off the bench and recorded 11 points, 6 rebounds and 3 assists in a 101–95 win over the Denver Nuggets. On April 3, he scored a then season-high 14 points in a 106–87 win over the Brooklyn Nets. Three days later, he made his first start as a Pelican, scoring 13 points in 29 minutes of action in a 104–97 loss to the Boston Celtics. On April 9, he signed with the Pelicans for the rest of the season. Later that day, he appeared in his seventh game for the Pelicans while making his third start. In 34 minutes of action against the Phoenix Suns, Ennis recorded an NBA career-high 18 points, 6 rebounds and 3 steals in a 121–100 loss. On April 11, he topped his career high with ease, scoring 29 points on 9-of-14 shooting in a 121–116 loss to the Chicago Bulls. In the Pelicans' season finale on April 13, Ennis scored 28 points in a 144–109 loss to the Minnesota Timberwolves.
On July 13, 2016, Ennis signed a two-year, $6 million contract with the Memphis Grizzlies, returning to the franchise for a second stint. In the Grizzlies' season opener on October 26, 2016, Ennis recorded 15 points and six rebounds in 28 minutes as a starter in a 102–98 win over the Minnesota Timberwolves. Four days later, he scored eight points and tied a career high with 12 rebounds in a 112–103 overtime win over the Washington Wizards. On November 2, 2016, he had a season-best game with 16 points and 10 rebounds in an 89–83 win over his former team, the New Orleans Pelicans. Ennis started in 13 of the Grizzlies' first 14 games before missing his first game of the season on November 23 against the Philadelphia 76ers due to a calf injury. He missed 14 games in total with a right calf injury, returning to action on December 18 against the Utah Jazz. For the season, he appeared in 64 games and averaged 6.7 points on 37.2 percent shooting from three-point range, four rebounds, 0.7 steals and 23.5 minutes per game. In the 64 games he appeared in, he scored double-digit points in 16 games, never reaching the 20-point mark.