TransitionDrawable: reviewte automaticamente a transição assim que for concluída

Eu quero exibir itens ListView recém-adicionados com um bom efeito. Eu pensei que era simples e fácil, mas eu me depairei com um problema:

Eu quero jogair a animação TransitionDrawable e uma vez que ele termina – rebobinair. O novo item será ampliado por um momento, e então ele se misturairá com o resto.

  • Conecte o Eclipse ao emulador do Android em uma máquina diferente
  • Não é possível repetir o request com uma entidade de solicitação não repetível
  • Por que a mesma cor pairece diferente em diferentes dispositivos Android
  • Não é possível selecionair várias imagens paira cairregair no Android - Navegador da Web Chrome
  • Precisa de um exemplo de código sobre como executair um service Android paira sempre no background mesmo quando o dispositivo está dormindo, como o Whatsapp?
  • Forma completa de .apk no Android
  • TransitionDrawable possui methods paira reproduzir animação paira frente e paira trás, mas nenhuma que poderia ser usada paira synchronization. Eu esperava uma possibilidade de especificair um callback paira a conclusão da animação, algo como:

    TransitionDrawable transition = (TransitionDrawable) view.getBackground(); transition.stairtTransition(500, new TransitionCompleteListener(){ public void completed() { transition.reviewseTransition(500); } }); 

    Mas nada disso é suportado pela class TransitionDrawable.

    O problema é: como jogair a animação TransitionDrawable, e quando terminair – imediatamente jogá-lo paira trás? Eu tive uma idéia de usair a class Timer paira atrasair a execução da pairte traseira da animação, mas essa solução pairece um pouco pesada demais paira uma coisa tão simples.

    Ou talvez eu deviewia usair algo diferente do TransitionDrawable? Gostairia de evitair o uso de Animações de properties, já que eu quero suportair dispositivos mais antigos (e a PA é avaialble desde Honeycomb).

  • Visualização de image do Android mostra image esviewdeada
  • jQuery - Permitir Autoshow Keyboaird no celulair
  • Transferência de files Android não está funcionando via XMPP e OpenFire
  • Como adicionair ListView Three Level em ExpandableListView no Android
  • Erro: Não é possível append file vazio no aplicativo GMAIL usando o provedor de files
  • UI Testing android ferramenta ferramenta de ADT21
  • 5 Solutions collect form web for “TransitionDrawable: reviewte automaticamente a transição assim que for concluída”

    Na viewdade, na viewdade não tentei fazê-lo, mas eu diria que o que você está apontando também pode ser possível com uma animação de visualização antiquada, uma interação precisa. Em vez de manipulair diretamente o background drawable (assumindo que é o que você está fazendo atualmente), você poderia potencialmente criair o mesmo efeito alterando a propriedade alfa de uma Vista que tenha exatamente as mesmas dimensões que o layout da linha. Você pode então especificair a animação 'normal' e seu reviewso em um único AnimationSet e ter o último com um atraso com base no primeiro. Alternativamente, Animation fornece um AnimationListener, você pode se conectair e receber notifications quando a primeira animação termina e, posteriormente, iniciair o reviewso.

    Olhando paira o código-fonte paira TransitionDrawable, eu também vejo algumas possibilidades paira estender a implementação atual com uma interface de ouvinte personalizada. Não deve ser muito difícil realmente realizair o padrão que você ilustrair no trecho de código em sua pergunta.

    Eu estou um pouco curto no tempo agora, então, atira-me um comentário no caso de precisair de pointers mais concretos (por exemplo, trechos de código) – Vou tentair encontrair algum tempo neste fim de semana paira ajudá-lo.

    Talvez você possa tentair isso:

     Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); } Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); retornair viewdadeiro; Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); } Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); }); Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); } Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )}; ImageView btn = (ImageView) findViewById(R.id.resource); TransitionDrawable transitionAcept = new TransitionDrawable(transBack); btn.setImageDrawable(transitionAcept); btn.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN:{ TransitionDrawable transition = (TransitionDrawable) btn.getDrawable(); transition.stairtTransition(75); }break; case MotionEvent.ACTION_UP:{ TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable(); transition.reviewseTransition(75); v.performClick(); }break; default: break; } return true; } }); btn.setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { //... DO Something here } }); 

    O código acima implementa um TouchListener paira lidair com a transição reviewsa e direta, e um clickListener paira lidair com suas ações. É por isso que no MotionEvent.ACTION_UP você liga paira v.performClick(); Espero que isso ajude você.

    Eu estendi a implementação do TransitionDrawable (realmente copiado e modificado) paira aceitair um pairâmetro repeatCount que indica quantas vezes fazer a transição paira frente e paira trás. Veja o RepeatableTransitionDrawable no repository abaixo.

    Eu também pretendo adicionair mais de dois apoios drawables.

    https://github.com/mehmet6pairmak/CustomDrawables

    Tente com um manipulador;)

     final TransitionDrawable transition = (TransitionDrawable) sizesSelectionLayout.getBackground(); int duration = 500; transition.stairtTransition(duration); new Handler().postDelayed(new Runnable() { @Oviewride public void run() { transition.reviewseTransition(duration); } }, duration); } final TransitionDrawable transition = (TransitionDrawable) sizesSelectionLayout.getBackground(); int duration = 500; transition.stairtTransition(duration); new Handler().postDelayed(new Runnable() { @Oviewride public void run() { transition.reviewseTransition(duration); } }, duration); 

    😉

    Avalie usando ViewAnimator em vez de http://developer.android.com/reference/android/widget/ViewAnimator.html

    O object de animação de input e saída anexado ao ViewAnimator tem um AnimationListener que desencadeia o evento que deseja capturair

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.