在布局动画结束后实现ScrollView的平滑滚动。
首先在代码中添加LayoutTransition,而不是在xml中
final LayoutTransition layoutTransition = mainLinearLayoutContainer.getLayoutTransition();
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);
}
layoutTransition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0);
然后创建LayoutTransition.TransitionListener 项目以能够多次添加/删除它。
此外,您还需要在翻译结束时删除 transitionListener,因为 endTransition() 回调被多次调用并且它破坏了 smoothScroll。
final LayoutTransition.TransitionListener transitionListener = new LayoutTransition.TransitionListener()
{
@Override
public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {}
@Override
public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType)
{
// Remove TransitionListener because endTransition is called multiple times and it brokes smoothScroll
layoutTransition.removeTransitionListener(this);
scrollContainer.post(new Runnable()
{
@Override
public void run() {
scrollContainer.smoothScrollTo(0, scrollContainer.getBottom());
}
});
}
};
最后添加动画起点。
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (licenseLabel.getVisibility() == View.GONE)
{
layoutTransition.addTransitionListener(transitionListener);
button.setVisibility(View.VISIBLE);
}
else {
licenseLabel.setVisibility(View.GONE);
}
}
});