《高级Android开发强化实战》之CoordinatorLayout修改

最近看了《高级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();

你可能感兴趣的:(《高级Android开发强化实战》之CoordinatorLayout修改)