在Android中将布局的动画从一个位置转换为另一个位置

时间:2012-05-24 11:34:42

标签: android translate-animation

我在FrameLayout内部有一个线性布局(比如A - 在右上角)。根据中心底部和底部的代码创建了一些新的线性布局。添加到相同的FrameLayout(比如l1,l2,l3 ...... l10)。宽度和宽度所有布局的高度(布局A& 10新布局)都相同。因此,在中心底部位置布局l10被显示为其最新布局添加。剩余布局将不会显示,因为它们将落后于l10。现在我想用TranslateAnimation将所有10个布局从布局B转换为布局A,我可以毫无问题地将其完成。

当第一个布局(l10)从其位置转换为布局A时,它将覆盖布局A区域,i10将立即显示在布局A上(这是预期的),并且l9将显示在底部中心位置。 但是当下一个布局(l9)翻译布局A时,它会 l10。相反它应该覆盖l10和l9现在应该在布局A区域上显示。如果有人之前遇到过这个问题,并且有相同的解决方案,请分享。

(有明确的截图但不能附加,因为我是新成员

提前致谢。

**CODE**

int numberOfCardsLeft = 10;
  FrameLayout fl=(FrameLayout)findViewById(R.id.cardsFrameMainLayout);

ArrayList<LinearLayout> animationCardLayouts= new ArrayList<LinearLayout>(10);//used for animation 

           for(int i=0;i<10;i++) //create 10 layouts & add to FrameLayout
        {
        cpuPlayers.add(temp.get(i));
        tempCardLayout = new LinearLayout(this);
        layoutParams=new FrameLayout.LayoutParams(cardLayoutWidth,cardLayoutHeight);
        layoutParams.gravity=Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM;
        //layoutParams.leftMargin=0;
        tempCardLayout.setLayoutParams(layoutParams);
        tempCardLayout.setWeightSum(10);
        tempCardLayout.setOrientation(LinearLayout.VERTICAL);
        tempCardLayout.setGravity(Gravity.CENTER);
        //adding different childs & different background to it
        animationCardLayouts.add(tempCardLayout);
        fl.addView(tempCardLayout);
           }
      cardAnimation = new TranslateAnimation("<to fit area of Layout a>");
                cardAnimation.setFillAfter(true);
                cardAnimation.setDuration(900);
                cardAnimation.setAnimationListener(cardAnimationListener);
                animationCardLayouts.get(numberOfCardsLeft-1).startAnimation(cardAnimation);

        cardAnimationListener= new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            // TODO Auto-generated method stub
            numberOfCardsLeft--;
            if(numberOfCardsLeft!=0)
            {
                tempCardAnimation = new TranslateAnimation("<to fit area of Layout a>");
                tempCardAnimation.setFillAfter(true);
                tempCardAnimation.setDuration(900);
                tempCardAnimation.setAnimationListener(cardAnimationListener);
                animationCardLayouts.get(numberOfCardsLeft-1).startAnimation(tempCardAnimation);
            }
        }
    };

0 个答案:

没有答案