El botón no responde a Click Event después de la animación de traducción

He realizado un botón de Animación de traducción en el botón, todo funciona como lo acepto, pero solo el problema es después de que la animación el botón no responde al evento de clic por favor corrígeme

Button b=(Button)findViewById(R.id.button1); TranslateAnimation slide=new TranslateAnimation(0, 30, 0,-40); slide.setDuration(500); slide.setZAdjustment(TranslateAnimation.ZORDER_TOP); slide.setFillAfter(true); b.startAnimation(slide); 

Si está manejando animaciones en un API de nivel inferior (debajo de HoneyComb), su animación en realidad no mueve el botón sino solo sus imágenes. Su clic estará en el mismo lugar donde lo colocó en su diseño.

Esto traducirá el objeto en la dirección y:

 ObjectAnimator mover = ObjectAnimator.ofFloat(v, "translationY", 0, 400); mover.start(); 

Pude lograr lo que querías, pero tendrás que administrar las coordenadas manualmente. Mira si te funciona.

 public class AnimationTestActivity extends Activity { private Button mButton; private LinearLayout.LayoutParams params; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(mClickListener); params = (LayoutParams) mButton.getLayoutParams(); } private android.view.View.OnClickListener mClickListener = new View.OnClickListener() { @Override public void onClick(View v) { TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 400); animation.setDuration(2000); animation.setAnimationListener(mAnimationListener); v.startAnimation(animation); } }; private AnimationListener mAnimationListener = new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { params.topMargin = params.topMargin + 400; mButton.setLayoutParams(params); } }; } 

Enfrenté este problema y lo solucioné hace un segundo. Entonces, creo que debería compartir mi solución con ustedes.

  • En el archivo xml de animación, android:fillAfter="true" cuando guardo android:fillEnabled="true" .

  • Registrar listener de animación, luego en el onAnimationEnd() , onAnimationEnd() View#Layout() para cambiar la posición de la vista.

      int newLeft = (int) (layoutContent.getLeft() + layoutContent.getWidth() * 0.8); layoutContent.layout(newLeft, layoutContent.getTop(), newLeft + layoutContent.getMeasuredWidth(), layoutContent.getTop() + layoutContent.getMeasuredHeight()); 

En mi caso, lo que hace la animación es que desliza el layoutContent hacia el lado izquierdo el 80% del ancho.

Funciona bien. Espero que esto ayude.

@Update: hoy, puedes usar ObjectAnimator en android 3.0 +. Si está desarrollando para Android bajo 3.0, puede encontrarlo en la biblioteca de soporte v.4. ObjectAnimator es mejor para la animación.

@ Actualización n. ° 2: puede usar ViewPropertyAnimator en la versión api de android 12 superior. Proporciona un mejor rendimiento y soluciona el problema con los eventos de clic. Ejemplo:

 mButton.animate() .setDuration(TIME) .translationY(VALUE) .start(); 

La animación no cambia la posición de Ver realmente. incluso si setfillAfter (true), la posición en la que puede aceptar el evento click es la posición original.

Intenta usar esto:

 b.layout(0, -40, b.getWidth(), b.getHeight()); 

Encontré una solución fácil para definir la posición final del botón en el diseño e iniciar la animación desde alguna posición, es decir, especificar fromX o fromY en lugar de poner como cero