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 开发人员。提前致谢。

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");
    }

}
4

2 回答 2

0

尝试调用 invalidate(),它会告诉视图它需要重绘自己

于 2013-11-13T15:21:04.210 回答
0

当您定义动画时,请尝试使用anim.setFillAfter(true);

于 2015-08-08T21:04:00.210 回答