2013-11-13 3 views
1

`Привет всем, у меня проблема с Android OnAnimationEnd. У меня два макета A и B, A - родительский макет родителя и содержит B в середине и ImageView (imv) внизу. Теперь мне нужно перевести imv из его исходного положения в макет B, который находится посреди макета A, так что в конце анимации imv будет принадлежать макету B, а не макет A. для этого, в OnAnimationEnd, я удалил imv из его родительского макета и попытался затем добавить его в макет B. Однако в конце анимация imv просто исчезнет, ​​как только она войдет в макет B. System.out показывает, что OnAnimationEnd вызывается и макет childCount также показывает, что imv добавлен в макет B, но imv никогда не допустимо в макете B. ниже - это код, кстати, я не опытный разработчик Android. Заранее спасибо.android OnAnimationEnd, невозможно добавить изображение в макет в OnAnimationEnd

public class MainActivity extends Activity implements AnimatorListener { 
    ImageView imv; 
    RelativeLayout parentL; 
    RelativeLayout middleL; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     imv = (ImageView) findViewById(R.id.imageView1); 
     imv.setOnClickListener(new MyClick(this)); 
     parentL = (RelativeLayout) findViewById(R.id.rl); 
     middleL = (RelativeLayout) findViewById(R.id.rll); 
    } 

    private class MyClick implements OnClickListener { 
     MainActivity ma; 

     public MyClick(MainActivity ma) { 
      this.ma = ma; 
     } 

     @Override 
     public void onClick(View v) { 
      ImageView imv = (ImageView) v; 
      float x = middleL.getX(); 
      float y = middleL.getY(); 
      imv.animate().setListener(ma); 
      imv.animate().x(x).y(y); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onAnimationCancel(Animator arg0) { 
    } 

    @Override 
    public void onAnimationEnd(Animator anim) { 
     System.out.println("onAnimationEnd"); 
     ViewGroup vg = (ViewGroup)imv.getParent(); 
     vg.removeView(imv); 
     middleL.addView(imv); 
     System.out.println("layout child count = "+middleL.getChildCount()); 
    } 

    @Override 
    public void onAnimationRepeat(Animator arg0) { 
    } 

    @Override 
    public void onAnimationStart(Animator arg0) { 
     System.out.println("onAnimationStart"); 
    } 

} 

ответ

0

Попытка вызвать Invalidate(), он сообщит мнению, что нужно перерисовать себя

+0

Спасибо Росомахи, но недействительный() не помогает , Я буду очень благодарен, если вы или кто-то отлаживаете этот код для меня, спасибо. –

0

при определении анимации, попробуйте использовать anim.setFillAfter(true);

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