Il problema del background è dovuto al riciclo delle view dell'adapter, per cui, se setti il background della view in una posizione x, verrà cambiato anche il background in tutte le posizioni in cui quella view verrà riciclata.
Per far sì che cambi solo il background della riga che vuoi, devi aggiungere un array in cui salvi la posizione della riga e, nel getview() dell'adapter controllare in che posizione della lista ti trovi e settare il background di conseguenza.
Se vuoi spostare a destra/sinistra la riga dopo una certa azione, credo tu debba usare un'animazione e usare lo stesso principio dell'array, altrimenti ti ritrovi con l'animazione applicata a più righe. Nel caso, invece, tu voglia spostare la riga a mano a mano che sposti il dito, puoi usare il metodo setX() della classe View, visto che usi un'api >=11, altrimenti mi pare si possa giocare sui margini.