最近看了《高级Android开发强化实战》(作者:王辰龙) 这本书,在CoordinatorLayout这一节,发现书中的sample有几个小问题:
一,工具栏设置了背景色,这样在页面向上滑动的时候,工具栏会带着背景色块向上滑动,这效果可不好看,应该将工具栏背景在滑动过程中设为透明色比较好,在视觉上直接穿透到AppBarLayout的头部图片;然后当工具栏完全滑动到顶部的时候,再给工具栏设置一个不透明的颜色。
二,透明度动画效果不好,文字有闪烁,不知道是不是我的手机系统版本低的原因。
三,AppBarLayout的位移监听器这一段有问题,在页面上下滑动几次后,发现中心标题和工具栏标题无法隐藏了,或者中心标题该显示的时候不显示了,工具栏标题该隐藏的时候又不隐藏了,效果很不好。
所以针对以上问题,帮它做了一下修改,主要修改了的AppBarLayout的位移监听器这段代码
private static final float PERCENTAGE_TO_SHOW_TITLE_AT_TOOLBAR = 0.9f;
private static final float PERCENTAGE_TO_HIDE_TITLE_DETAILS = 0.3f;
private static final int ALPHA_ANIMATIONS_DURATION = 200;
private boolean mIsTheTitleVisible = false;
private boolean mIsTheTitleContainerVisible = true;
@Bind(R.id.main_iv_placeholder)
ImageView mIvPlaceholder; // 大图片
@Bind(R.id.main_ll_title_container)
LinearLayout mLlTitleContainer; // Title的LinearLayout
@Bind(R.id.main_fl_title)
FrameLayout mFlTitleContainer; // Title的FrameLayout
@Bind(R.id.main_abl_app_bar)
AppBarLayout mAblAppBar; // 整个可以滑动的AppBar
@Bind(R.id.main_tv_toolbar_title)
TextView mTvToolbarTitle; // 标题栏Title
@Bind(R.id.main_tb_toolbar)
Toolbar mTbToolbar; // 工具栏
@Bind(R.id.collaps)
CollapsingToolbarLayout collaps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//setSupportActionBar(mTbToolbar);
mTbToolbar.setTitle("");
mAblAppBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int i) {
int totalScrollRange = appBarLayout.getTotalScrollRange();
//float percentage = (float) Math.abs(i) / (float) totalScrollRange;
float percentage = (float) i / (float) totalScrollRange;
//handleAlphaOnTitle(percentage);
//handleToolbarTitleVisibility(percentage);
if (appBarLayout.getHeight() == Math.abs(i)) {
mTbToolbar.setBackgroundColor(Color.WHITE);
mTvToolbarTitle.setVisibility(View.VISIBLE);
}
if (appBarLayout.getHeight() > Math.abs(i) + mTbToolbar.getHeight()){
mTbToolbar.setBackgroundColor(Color.TRANSPARENT);
mTvToolbarTitle.setVisibility(View.INVISIBLE);
}
if (percentage <= -PERCENTAGE_TO_HIDE_TITLE_DETAILS){
if (mIsTheTitleContainerVisible){
startAlphaAnimation(mLlTitleContainer,ALPHA_ANIMATIONS_DURATION,View.INVISIBLE);
mIsTheTitleContainerVisible = false;
}
}
if (appBarLayout.getHeight() >= Math.abs(i) + mIvPlaceholder.getHeight()) {
if (!mIsTheTitleContainerVisible){
startAlphaAnimation(mLlTitleContainer,ALPHA_ANIMATIONS_DURATION,View.VISIBLE);
mIsTheTitleContainerVisible = true;
}
}
}
});
initParallaxValues();