2012-03-14 2 views
0

У меня есть 3 ImageButtons которые анимированные, когда заполнение налево, как это:Android фликера при использовании анимации и onAnimationEnd Слушатель

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
{ 
    ImageButton top; 
    ImageButton left; 
    ImageButton right; 

    top  = meMap.get("top"); 
    left = meMap.get("left"); 
    right = meMap.get("right"); 

    goLeft = 
      new TranslateAnimation(0, -(top.getLeft() - left.getLeft()), 0, -(top.getTop() - left.getTop())); 

    goRight = 
      new TranslateAnimation(0, -(left.getLeft() - right.getLeft()), 0, -(left.getTop() - right.getTop())); 

    goTopFromRight = 
      new TranslateAnimation(0, top.getLeft() - right.getLeft(), 0, top.getTop() - right.getTop()); 


    goRight.setAnimationListener(this); 

    if (velocityX<-500) 
    { 
     System.out.println("aaaa "+"ScrollLeft"); 


     goLeft.setDuration(500); 
     goLeft.setFillAfter(true); 
     goLeft.setFillAfter(true); 
     top.startAnimation(goLeft); 

     goRight.setDuration(500); 
     goRight.setFillAfter(true); 
     goRight.setFillAfter(true); 
     left.startAnimation(goRight); 

     goTopFromRight.setDuration(500); 
     goTopFromRight.setFillAfter(true); 
     goTopFromRight.setFillAfter(true); 
     right.startAnimation(goTopFromRight); 

    } 

Теперь, у меня есть onanimationEnd слушателя, как это:

public void onAnimationEnd(Animation animation) { 
    ImageButton top; 
    ImageButton left; 
    ImageButton right; 

    top  = meMap.get("top"); 
    left = meMap.get("left"); 
    right = meMap.get("right"); 



    top.clearAnimation(); 
    left.clearAnimation(); 
    right.clearAnimation(); 


    RelativeLayout.LayoutParams layoutLeft = 
       new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 

    layoutLeft.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.CenterTextView); 
    layoutLeft.addRule(RelativeLayout.LEFT_OF,R.id.CenterTextView); 
    top.setLayoutParams(layoutLeft); 


    RelativeLayout.LayoutParams layoutRight = 
      new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 

    layoutRight.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.CenterTextView); 
    layoutRight.addRule(RelativeLayout.RIGHT_OF,R.id.CenterTextView); 
    left.setLayoutParams(layoutRight); 

    RelativeLayout.LayoutParams layoutTop = 
      new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 

    layoutTop.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE); 
    layoutTop.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE); 
    right.setLayoutParams(layoutTop); 


    meMap.put("top", right); 
    meMap.put("left", top); 
    meMap.put("right", left); 

} 

Проблема в том, что когда я делаю анимацию (кроме goRight), мои значки мерцают для момента litle. Я не знаю, как это решить. Пожалуйста помоги.

ответ

4

Ана, я думаю, вы уже читали мои ответы здесь

Android TranslateAnimation resets after animation

android animation is not finished in onAnimationEnd

Я также ответил на Ваш комментарий, в основном вместо делания функциональности внутри метода mAnimation.setAnimationListener , вам необходимо создать пользовательские ImageButtons и поместить туда функциональность

public Class myImageButton extends ImageButton { 
@Override 
    protected void onAnimationEnd() { 
     super.onAnimationEnd(); 
     //Functionality here 
    } 
+0

Большое спасибо за воспроизведение @Soham. На самом деле, если я понимаю, мне нужно отклонить goRight.setAnimationListener (это); и затем, я должен создать 3 класса для моих 3 кнопок изображения? Я сори, но я новичок. –

+0

Да, вы абсолютно правы, попробуйте создать эти классы, а затем определите функциональность внутри них. – Soham

+0

Я попробую немедленно, спасибо за ответ. –

0

Я искал все сообщения stackoverflow для проблемы с анимацией (мерцание и вялость). Я не нашел идеального ответа. Но я нашел решение для того же, который, как показано ниже,

OnStart использования анимации,

view_you_want_to_animate.setDrawingCacheEnabled(true); 

OnEnd использования анимации,

view_you_want_to_animate.setDrawingCacheEnabled(false); 

Теперь мой взгляд не имеет мерцания или медленное поведение, когда мое представление оживляет. Я хорошо работаю для меня.

+0

Не работал для меня. Чтобы прояснить это, предполагается, что он включен в onAnimationStart и onAnimationEnd? – Luke

+0

Да, вам нужно переопределить методы onAnimationStart и onAnimationEnd. –

+0

Закончено с использованием animation.setFillAfter (true), которое избавилось от мерцания. – Luke

Смежные вопросы