Imagine que seja necessário em uma aplicação mudar a informação em um TextView ou Imagem em uma ImageView. O que aconteceria é a retirada da antiga informação visual ou textual e a inserção de uma nova de forma rápida e praticamente invisível ao usuário.
Isso pode causar uma certa confusão ao usuário que antes tinha visto uma imagem e agora, de repente, está visualizando outra. Pode chegar a questionar se realmente havia visualizado uma outra imagem.
A transição de um texto para outro ou de uma imagem para outra deve ser perceptível ao usuário para que ele entenda o que está acontecendo. Isso é muito comum de se ver em relógios, news headlines e até mesmo em uma galeria de fotos quando selecionamos uma segunda imagem.
Para isso, o Android disponibiliza em sua biblioteca as classes ImageSwitcher e TextViewSwitcher e também a classe Animation para as animações das transições de texto ou imagem.
Fazendo Uso
ImageSwitcher e TextViewSwitcher funcionam da mesma maneira. Ambos são inseridos no documento .xml como elementos visuais, da mesma forma que um TextView ou Image View, depois são capturados através de seu identificador (findViewById(R.id.your_textview)) e fazem uso de uma factory (setFactory(new ViewFactory())) para eliminar a antiga view exibida e substituir por uma nova.
Lembrando que essas substituição de views sempre é antecedida e sucedida por animações, por isso, em nosso objeto TextViewSwitcher ou ImageSwitcher capturado podemos inserir uma instância da classe Animation tanto para anteceder (setInAnimation(Animation animation)) a modificação e um segundo para suceder (setOutAnimation(Animation animation)), podendo ser iguais ou diferentes.
public class MainActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); TextSwitcher textSwitcher = (TextSwitcher) findViewById(R.id.your_textview); mTextSwitcher.setFactory(new ViewFactory() { @Override public View makeView() { TextView textView = new TextView(MainActivity.this); textView .setGravity(Gravity.CENTER); return t; } }); textSwitcher.setInAnimation(in); textSwitcher.setOutAnimation(out); } }
Após isso, todo texto que for inserido no objeto da classe TextSwitcher ali configurando, sofrerá o efeito de transição.