Pierwszy mecz w jego barwach rozegrał 23 lipca 2005 w przegranym przez Bayer 0:1 meczu Pucharu Niemiec z Werderem Brema. W lidze zadebiutował 7 sierpnia 2005 w spotkaniu z Eintrachtem Frankfurt (4:1 dla Bayeru). W sezonie 2010/2011 wywalczył z Bayerem wicemistrzostwo Niemiec.
Latem 2012 Barnetta odszedł z Bayeru do FC Schalke 04. W 2013 roku został z niego wypożyczony na jeden sezon do Eintrachtu Frankfurt. W 2015 roku wyjechał do Stanów Zjednoczonych i przez dwa lata grał w zespole Major League Soccer, Philadelphia Union. W 2017 roku wrócił do FC Sankt Gallen.
Kariera reprezentacyjna Barnetta jest reprezentantem Szwajcarii. W drużynie narodowej zadebiutował 9 września 2004 roku w meczu eliminacji do MŚ 2006 przeciwko Irlandii (1:1). Był uczestnikiem Euro 2004, z którego odpadł z drużyną po fazie grupowej. W 2006 roku pojechał Mistrzostwa Świata. Z reprezentacją dotarł tam do 1/8 finału, jednak Helweci ulegli tam po rzutach karnych Ukrainie. Na tym mundialu Barnetta zdobył gola w meczu grupowym przeciwko Togo (2:0). W 2008 roku został powołany do kadry na Mistrzostwa Europy, które zakończył jednak z drużyną na fazie grupowej. Grał również na Mistrzostwach Świata 2010 i 2014.