我有一个LinearLayout
(LayoutContentView
),可以包含一个或两个视图(SubView1
和SubView2
)(它们是TextView
或{{ 1}})。
此ImageView
位于另一个layout
(LinearLayout
)。
我想在MyScreenLayout
制作一个动画,以便它可以移动并在LayoutContentView
中显示其中的一部分。
这两个布局都有MyScreenLayout
,所以它可以让它的孩子在自己之外画画。
根据不同的参数,我可以更改内容的大小以及我将显示的内容的大小。
基本上,我从上到下展示两个子视图,并从底部到顶部展开,仅显示第二个子视图。在我花费之前,我增加了setClipChildren(false);
的大小,因此它可以显示两个子视图,并且在我未完成之后,我减小了LayoutContentView
的大小,因此它只能显示第二个子视图,并且它在屏幕上留出了其他元素的空间。
以下是我花费和取消费用的方法LayoutContentView
:
LayoutContentView
我制作动画的方式我需要在mLayoutContentView.clearAnimation();
float yFrom = 0.0F;
float yTo = 0.0F;
float xFrom = 0.0F;
float xTo = 0.0F;
if (expend) { // if we expend
// I change the height of my LayoutContentView so it we can show it's two subviews
final android.view.ViewGroup.LayoutParams lp = mLayoutContentView.getLayoutParams();
lp.height = subView1H + subView2H;
setLayoutParams(lp);
invalidate();
// we start the animation so it shows only the second subview
yFrom = -subView1H;
// and we animate from top to bottom until it shows the two subviews
yTo = 0;
} else { // if we un-expend
// we animate from bottom to top starting by showing the two subviews
yFrom = 0;
// and progressively hiding the first subview and showing only the second subview
yTo = -subView1H;
}
Animation anim = new TranslateAnimation(xFrom, xTo, yFrom, yTo);
anim.setDuration(1000);
anim.setFillAfter(true);
anim.setFillEnabled(true);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (!expend) {
// if we un expend at the end of the animation we can set the size of LayoutContentView to the size of the second subview again
final android.view.ViewGroup.LayoutParams lp = mLayoutContentView.getLayoutParams();
lp.height = subView2H;
mLayoutContentView.setLayoutParams(lp);
invalidate();
}
}
});
mLayoutContentView.startAnimation(anim);
上应用它,包含两个子视图的布局,而LayoutContentView
它不会动画。
我尝试使用startAnimation()
,但不是在LayoutAnimationController
上进行动画,而是在每个孩子上进行动画...
我也尝试自己动画每个孩子,但我不知道为什么,第二个子视图没有显示。
每次我尝试使用LayoutContentView
时,都会看到动画所做的更改。
有没有人知道解决方案或遇到同样的问题并找到了一个好的解决方案?
编辑:
好吧,如果你为HierarchyViewer
设置background
颜色并用动画移动它们,TextView
移动,但即使你已经为动画设置了填充后参数,背景也是如此回到它的原始位置或类似的东西,因此当我为我的background
两个设置背景颜色时,SubView
的背景中有一个隐藏了另一个背景。 。
还有一个问题,如果在动画之后,其中一个SubView
仍在其布局之外,那么动画期间也会出现问题,所以我也在这里添加一个限制。