我有一个定义为包含 3 个视图的相对布局(垂直)。顶部和底部视图均为 16 像素高,并显示文本。中间视图显示游戏应用程序的图形。
在游戏过程中的不同时间点,应用程序会运行一个 TranslateAnimation,它可以有效地向上或向下“滚动”中间视图。这使游戏中的游戏角色在中间视图中“居中”。
我的问题是,当动画运行时,翻译会导致顶部或底部视图被覆盖。这仅持续动画的持续时间。动画完成后,一切正常,顶部/底部视图按预期显示其文本。令我惊讶的是,翻译动画在其运行的(中间)视图之外显示内容。我的愿望是,当翻译向上/向下滑动显示时,动画只会影响中间视图,不会遮挡顶部或底部视图中的内容。
以下是我用来创建布局的代码。自定义视图直接派生自 View 并在其 onDraw(Canvas) 方法中显示内容。
RelativeLayout rl = new RelativeLayout(this);
topView = new MyTextView(this);
topView.setId(1);
middleView = new MyGameView(this);
middleView.setId(2);
bottomView = new MyTextView(this);
bottomView.setId(3);
final int textSize = 16;
RelativeLayout.LayoutParams lpTop = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, textSize);
lpTop.addRule(RelativeLayout.ALIGN_PARENT_TOP);
RelativeLayout.LayoutParams lpBottom = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, textSize);
lpBottom.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
RelativeLayout.LayoutParams lpMiddle = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
lpMiddle.addRule(RelativeLayout.BELOW, 1);
lpMiddle.addRule(RelativeLayout.ABOVE, 3);
rl.addView(topView, lpTop);
rl.addView(middleView, lpMiddle);
rl.addView(bottomView, lpBottom);
setContentView(rl);
middleView 中启动动画的代码如下:
TranslateAnimation ta = new TranslateAnimation(0, 0, 0, yDistance);
ta.setDuration(500);
startAnimation(ta);
我已经尝试了很多方法来让这个动画按预期运行,但一直无法做到。希望有人可以提供帮助。提前致谢。