布局捕捉到可见(仅限第一次)而不是幻灯片动画
Layout snaps to visible (first time only) instead of slide animation
我正在屏幕底部创建一个 2 行信息栏。
- 起初只有顶行可见。
- 按一个'expand'按钮,第二行会从
以下。现在两行都可见。
- 再次按下相同的按钮,最下面的一行向下滑动,并且
只有第一行可见。
这种情况很常见,在检查了不同的实现之后,我找到了这个几乎完美的简单方案:
1 中的 2 个布局 > 使底部消失 > onClick - 使底部可见并在整个栏上应用向上滑动 > onClick - 在栏上应用向下滑动并使底部消失
下面是onClick代码:
mInfoBar = (RelativeLayout) mRootView.findViewById(R.id.infoBar);
mInfoBottomRow = (RelativeLayout) mRootView.findViewById(R.id.infoBottomRow);
mBtnExpand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mInfoBottomRow.getVisibility() == View.GONE) {
mInfoBottomRow.setVisibility(View.VISIBLE);
TranslateAnimation slideUp = new TranslateAnimation(0, 0, mInfoBottomRow.getHeight(), 0);
slideUp.setDuration(200);
mInfoBar.startAnimation(slideUp);
} else {
TranslateAnimation slideDown = new TranslateAnimation(0, 0, 0, mInfoBottomRow.getHeight());
slideDown.setDuration(200);
slideDown.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
mInfoBar.clearAnimation();
mInfoBottomRow.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
});
mInfoBar.startAnimation(slideDown);
}
}
});
问题是,第一次按下按钮时,信息栏(顶行和底行)会卡到它的位置(没有滑动效果)。
所有其他后续按钮都可以正常工作...
第 2 次按下 - 栏向下滑动以显示位于屏幕底部的顶部栏和底部行消失。
第 3 次按下 - 条向上滑动以显示顶行和底行。
等等...
无法理解为什么setVisibility(VISIBLE) 只能第一次捕捉到视图,或者为什么第一次没有显示滑动效果。
我宁愿不更改动画实现,因为它只给了我想要的效果一次。
因此,非常感谢其中的任何见解。
我猜你的hiddenView的高度第一次是0。您应该在布局中使 hiddenView 可见。
使用
android:visibility="visible"
而不是
android:visibility="gone"
在你的隐藏视图中。
通过以下代码获取高度并使其消失:
hiddenView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
height = hiddenView.getHeight();
hiddenView.getViewTreeObserver().removeGlobalOnLayoutListener( this );
hiddenView.setVisibility( View.GONE );
}
});
使用这个高度来制作动画..:)
我正在屏幕底部创建一个 2 行信息栏。
- 起初只有顶行可见。
- 按一个'expand'按钮,第二行会从 以下。现在两行都可见。
- 再次按下相同的按钮,最下面的一行向下滑动,并且 只有第一行可见。
这种情况很常见,在检查了不同的实现之后,我找到了这个几乎完美的简单方案:
1 中的 2 个布局 > 使底部消失 > onClick - 使底部可见并在整个栏上应用向上滑动 > onClick - 在栏上应用向下滑动并使底部消失
下面是onClick代码:
mInfoBar = (RelativeLayout) mRootView.findViewById(R.id.infoBar);
mInfoBottomRow = (RelativeLayout) mRootView.findViewById(R.id.infoBottomRow);
mBtnExpand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mInfoBottomRow.getVisibility() == View.GONE) {
mInfoBottomRow.setVisibility(View.VISIBLE);
TranslateAnimation slideUp = new TranslateAnimation(0, 0, mInfoBottomRow.getHeight(), 0);
slideUp.setDuration(200);
mInfoBar.startAnimation(slideUp);
} else {
TranslateAnimation slideDown = new TranslateAnimation(0, 0, 0, mInfoBottomRow.getHeight());
slideDown.setDuration(200);
slideDown.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
mInfoBar.clearAnimation();
mInfoBottomRow.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
});
mInfoBar.startAnimation(slideDown);
}
}
});
问题是,第一次按下按钮时,信息栏(顶行和底行)会卡到它的位置(没有滑动效果)。
所有其他后续按钮都可以正常工作...
第 2 次按下 - 栏向下滑动以显示位于屏幕底部的顶部栏和底部行消失。
第 3 次按下 - 条向上滑动以显示顶行和底行。
等等...
无法理解为什么setVisibility(VISIBLE) 只能第一次捕捉到视图,或者为什么第一次没有显示滑动效果。
我宁愿不更改动画实现,因为它只给了我想要的效果一次。 因此,非常感谢其中的任何见解。
我猜你的hiddenView的高度第一次是0。您应该在布局中使 hiddenView 可见。 使用
android:visibility="visible"
而不是
android:visibility="gone"
在你的隐藏视图中。
通过以下代码获取高度并使其消失:
hiddenView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
height = hiddenView.getHeight();
hiddenView.getViewTreeObserver().removeGlobalOnLayoutListener( this );
hiddenView.setVisibility( View.GONE );
}
});
使用这个高度来制作动画..:)