Editar texto: cambia el texto mientras escribes

Necesito reemplazar el texto dentro de EditText mientras escribo: Ejemplo: si el usuario presionó "A" se almacenaría en un búfer y en su lugar se mostrará "D" (parece que presionó "D"). Ahora puedo leer el carácter presionado pero no puedo mostrar ningún carácter en el et para evitar el flujo de pila:

final EditText et = (EditText) findViewById(R.id.editTexts);
    final TextView tv = (TextView) findViewById(R.id.textView2);

    et.addTextChangedListener(new TextWatcher()
    {
            public void afterTextChanged(Editable s){}
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            } 
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(s.length() > 0) {
                    tv.setText(s.toString().substring(s.length()-1));
                    et.setText("");
                }
            }
    });

Respuestas a la pregunta(3)

Su respuesta a la pregunta