我在 FrameLayout 中有一个线性布局(比如 A - 在右上角)。有一些从中心底部的代码创建的新线性布局并添加到相同的 FrameLayout(比如 l1、l2、l3...l10)。所有布局(布局 A 和 10 个新布局)的宽度和高度都相同。因此,在中心底部位置,布局 l10 显示为其添加的最新布局。其余布局将不会显示,因为它们将在 l10 之后。现在,我想使用 TranslateAnimation 将所有 10 个布局从布局 B 转换为布局 A,我可以毫无问题地做到这一点。
当第一个 layout(l10) 从其位置转换为 Layout A 时,它覆盖了布局 A 区域,并且 i10 现在将显示在布局 A 上(这是预期的), l9 将显示在底部中心位置。但是当下一个 layout(l9) 翻译 layout 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);
}
}
};