Derby County Barnes was born in
Barking, London. with his league debut coming in a 1–1 draw away to
Crewe two weeks later as a 73rd minute replacement for
Marcus Tudgay. Westley was familiar with Barnes from his time as a youngster at Derby and made him an integral part of the team as Derby managed to avoid relegation to
League One. Barnes played a role in 16 matches under Westley, with his first start coming in Westley's first match in charge (a narrow 1–0 home defeat to
Sheffield United) but with the appointment of
Billy Davies as manager and new investment, Barnes signed a four-year extension to his current contract. Barnes became a regular in the Derby team that won promotion to the Premier League, playing in 46 matches (with 34 of those starts) putting him behind only the club's player of the year
Steve Howard in terms of appearances. He also scored eight goals, including four in two weeks with a 92nd-minute equaliser in a 2–2 draw away to
Cardiff City, a brace in a 2–1 home win over
Barnsley, and the winner in a 2–1 home win against
West Bromwich Albion. During this time he gained a reputation for supposedly saying "Whoosh" as he ran past defenders. In a 2017 interview, he indicated this was a one-time response to aggression from an opponent, and has been taken out of context. His performances in March 2007 earned him the
Championship Player of the Month award for that month. Although he picked up an injury towards the end of the season, Barnes was still able to make an impact in Derby's successful Championship play-off campaign in his two substitute appearances. It was his corner from which
Leon Best scored an
own goal in the second leg of the semi-final clash with
Southampton and he also came off the bench to set up
Stephen Pearson's winner in the 1–0
2007 Championship play-off final victory over West Brom. After this, it was found out that Barnes was playing with a broken foot and he missed all of the summer injured as Derby prepared for life back in the top flight. He was named Derby's Young Player of the Year for the 2006–07 season. These injuries carried over into the start of Derby's disastrous
2007–08 season. He made his first
Premier League appearance on 22 September 2007 as a substitute against
Arsenal in the 75th minute and scored his first goal in a 2–2 draw against
Newcastle United. The injuries that plagued Barnes through the course of his season, as well as no pre season and being put in the team two months earlier than was recommended, affected his form and he failed to play as vital a role in Derby's season as he had during 2006–07 and his season ended early when it was discovered he had a knee injury which required major surgery, meaning that he would miss the remainder of the 2007–08 season and the start of 2008–09. Barnes returned to the Derby team in January 2009 and scored twice at
Old Trafford in the League Cup semi-final second leg as Derby fell to a 4–2 defeat on the night, 4–3 on aggregate. After just three league appearances, on 31 January 2009, Barnes signed for
Fulham on
loan for the rest of the
2008–09 season with a view to a possible permanent transfer in the summer, with Derby receiving a substantial loan fee, and agreeing a fee of £2 million, raising to £4 million on appearances if he signed permanently. He did not make a single appearance for the Cottagers due to fitness, but scored seven in eight reserve matches. On 24 May,
Roy Hodgson confirmed that Fulham would not be signing Barnes on a permanent basis and that he would return to Derby at the end of the season. Barnes returned to Derby but sustained another injury in a pre-season friendly against
Stoke City after a two footed lunge by Carl Dickinson, and was eventually released from his Derby contract on 11 December 2009. After some weeks training with Premier League club
Birmingham City, where his brother was playing at academy level, in mid-January 2010 Barnes moved on to train with West Bromwich Albion of the Championship.
West Bromwich Albion On 3 February 2010, Barnes signed for West Bromwich Albion on an 18-month contract, with an option for a further one-year extension. He made his debut in the 1–0 win against
Sheffield Wednesday on 9 March 2010, coming off the bench for the last 10 minutes of the match. On 25 May 2011 it was announced that Barnes was being released by West Brom. He had not played any matches for the club since the arrival of manager
Roy Hodgson in January 2011. After being released by WBA, Barnes was linked with a move to
Nottingham Forest with
Steve McClaren wanting to sign the player.
Doncaster Rovers On 4 August 2011, Barnes signed a six-month contract with
Doncaster Rovers following a successful trial at the club. Barnes made his debut for the club as a substitute in the first match of the 2011–12 season against
Brighton & Hove Albion. Barnes made a mixture of starts and substitute appearances at Rovers. On 6 January, Barnes signed a four-month extension keeping at Doncaster until 5 May 2012. On 25 February 2012 Barnes scored his first goal for Doncaster Rovers in a 1–1 draw against
Peterborough United. In May 2012, Barnes was released by the club after the expiry of his contract.
Houston Dynamo in 2014 Barnes signed with
Major League Soccer club
Houston Dynamo on 29 August 2012. He scored his first goal with the club in the
CONCACAF Champions League against
CD FAS of El Salvador on 20 September 2012. Barnes scored his first MLS league goal on 23 March 2013 in Houston's 2–1 victory over
Vancouver Whitecaps FC. On 21 September 2013, Barnes scored his first MLS brace against Chivas USA in a 5–1 victory for the Houston Dynamo. On 4 March 2016, Barnes was appointed captain of the Houston Dynamo for the 2016 season.
Vancouver Whitecaps FC Barnes was traded to
Vancouver Whitecaps FC on 30 July 2016 in exchange for general allocation money and the MLS rights to
Keyner Brown. The deal also dictated that Houston will receive a percentage of any future transfer fees if Barnes is loaned or transferred outside the league.
Orlando City SC Barnes was traded to fellow MLS club
Orlando City SC on 25 February 2017 in exchange for
Brek Shea. He made his first appearance for Orlando against
New York City FC on 5 March 2017, coming on as a substitute in the 11th minute after
Kaká suffered a hamstring injury. Barnes became a
designated player after Orlando waived
Bryan Róchez on 17 March 2017. At the end of the 2017 season, Orlando opted to decline their contract option on Barnes.
Leon Barnes signed with Mexican club
León on 9 January 2018.
Colorado Rapids On 13 July 2018, Barnes signed a six-month deal with MLS side
Colorado Rapids. He was released by Colorado at the end of their 2018 season.
Hyderabad FC In 2019, he signed for
ISL side
Hyderabad FC. ==International career==